Azure Database for MySQL - フレキシブル サーバーで監査ログを使用してデータベース アクティビティを追跡する

適用対象: Azure Database for MySQL - フレキシブル サーバー

Azure Database for MySQL フレキシブル サーバーを使用すると、ユーザーは監査ログを構成できます。 監査ログは、接続、管理、DDL、DML の各イベントなど、データベースレベルのアクティビティを追跡するために使用できます。 これらの種類のログは、通常、コンプライアンスのために使用されます。

監査ログを構成する

重要

サーバーのパフォーマンスに大きな影響を与えることなく、最小限の量のデータが収集されるように、監査のために必要なイベントの種類とユーザーのみをログに記録することをお勧めします。

監査ログは、既定では無効になっています。 有効にするには、audit_log_enabled サーバー パラメーターを "ON" に設定します。 これは、Azure portal または Azure CLI を使用して構成できます。

監査ログの動作を制御するために調整できるその他のパラメーターには、次のようなものがあります。

  • audit_log_events: 記録するイベントを制御します。 特定の監査イベントについては、次のを参照してください。
  • audit_log_include_users:ログ記録の対象となる MySQL ユーザー。 このパラメーターの既定値は空で、すべてのユーザーがログに記録されます。 優先順位は、audit_log_exclude_users より高くなっています。 パラメーターの最大長は 512 文字です。 たとえば、ワイルドカード値 dev* には、"dev1,dev_user,dev_2" など、キーワード dev で始まるエントリを持つすべてのユーザーが含まれます。 この例で、ユーザーを含めるためのワイルドカード エントリのもう 1 つの例は *dev です。"stage_dev,prod_dev,user_dev" など、値 "dev" で終わるすべてのユーザーが監査ログ エントリに含まれます。 さらに、パターンでワイルドカード文字として疑問符 (?) を使用することもできます。
  • audit_log_exclude_users:ログ記録から除外する MySQL ユーザー。 パラメーターの最大長は、512 文字です。 ユーザーを表すワイルドカード エントリは、監査ログでユーザーを除外するためにも受け入れられます。 たとえば、ワイルドカード値 stage* により、"stage1,stage_user,stage_2" など、キーワード stage で始まるエントリを持つすべてのユーザーが除外されます。 この例で、ユーザーを除外するためのワイルドカード エントリのもう 1 つの例は *com です。値 com で終わるすべてのユーザーが監査ログ エントリから除外されます。 さらに、パターンでワイルドカード文字として疑問符 (?) を使用することもできます。

Note

audit_log_include_users は、audit_log_exclude_users よりも優先順位が高くなっています。 たとえば、audit_log_include_users = demouser かつ audit_log_exclude_users = demouserの場合、audit_log_include_users の優先度が高いので、ユーザーは監査ログに含まれます。

Event 説明
CONNECTION - 接続の開始
- 接続終了
CONNECTION_V2 - 接続の開始 (成功した試行または失敗した試行のエラー コード)
- 接続終了
DML_SELECT SELECT クエリ
DML_NONSELECT INSERT、DELETE、UPDATE クエリ
DML DML = DML_SELECT + DML_NONSELECT
DDL "DROP DATABASE" のようなクエリ
DCL "GRANT PERMISSION" のようなクエリ
ADMIN "SHOW STATUS" のようなクエリ
GENERAL DML_SELECT、DML_NONSELECT、DML、DDL、DCL、および ADMIN のすべて
TABLE_ACCESS テーブル読み取りステートメント。たとえば、SELECT、INSERT INTO ...SELECT
- テーブル削除ステートメント。たとえば、DELETE、TRUNCATE TABLE
- テーブル挿入ステートメント。たとえば、INSERT、REPLACE
- テーブル更新ステートメント。たとえば、UPDATE

監査ログにアクセスする

監査ログは、Azure Monitor の診断設定と統合されます。 フレキシブル サーバーで監査ログを有効にすると、Azure Monitor ログ、Azure Event Hubs、または Azure Storage にそれらを出力できます。 診断設定の詳細については、診断ログのドキュメントを参照してください。 Azure portal で診断設定を有効にする方法の詳細については、監査ログに関するポータルの記事を参照してください。

Note

診断と設定を使用してログを Azure Storage に送信する場合、Premium Storage アカウントはサポートされません。

次のセクションでは、イベントの種類に基づく MySQL 監査ログの出力について説明します。 出力方法に応じて、含まれるフィールドとそれらが表示される順序が異なることがあります。

Connection

プロパティ 説明
TenantId テナント ID
SourceSystem Azure
TimeGenerated [UTC] ログが記録されたときのタイムスタンプ (UTC)
Type ログの種類。 常に AzureDiagnostics
SubscriptionId サーバーが属するサブスクリプションの GUID
ResourceGroup サーバーが属するリソース グループの名前
ResourceProvider リソース プロバイダーの名前。 常に MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId リソース URI
Resource サーバーの名前 (大文字)
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s サーバーの名前
event_class_s connection_log
event_subclass_s CONNECTDISCONNECTCHANGE USER
connection_id_d MySQL によって生成された一意の接続 ID
host_s 空白
ip_s MySQL に接続しているクライアントの IP アドレス
user_s クエリを実行しているユーザーの名前
db_s 接続先のデータベースの名前
\_ResourceId リソース URI
status_d CONNECTIONS_V2 イベントの接続エラー コード エントリ。

全般

以下のスキーマは、GENERAL、DML_SELECT、DML_NONSELECT、DML、DDL、DCL、および ADMIN の各イベントの種類に適用されます。

注意

sql_text_s の場合、2048 文字を超えたログは切り捨てられます。

プロパティ 説明
TenantId テナント ID
SourceSystem Azure
TimeGenerated [UTC] ログが記録されたときのタイムスタンプ (UTC)
Type ログの種類。 常に AzureDiagnostics
SubscriptionId サーバーが属するサブスクリプションの GUID
ResourceGroup サーバーが属するリソース グループの名前
ResourceProvider リソース プロバイダーの名前。 常に MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId リソース URI
Resource サーバーの名前 (大文字)
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s サーバーの名前
event_class_s general_log
event_subclass_s LOGERRORRESULT (MySQL 5.6 でのみ利用可能)
event_time UTC タイムスタンプのクエリの開始時刻
error_code_d エラー コード (クエリが失敗した場合)。 0 は、エラーなしを意味します
thread_id_d クエリを実行したスレッドの ID
host_s 空白
ip_s MySQL に接続しているクライアントの IP アドレス
user_s クエリを実行しているユーザーの名前
sql_text_s 完全なクエリ テキスト
\_ResourceId リソース URI

テーブル アクセス

注意

sql_text_s の場合、2048 文字を超えたログは切り捨てられます。

プロパティ 説明
TenantId テナント ID
SourceSystem Azure
TimeGenerated [UTC] ログが記録されたときのタイムスタンプ (UTC)
Type ログの種類。 常に AzureDiagnostics
SubscriptionId サーバーが属するサブスクリプションの GUID
ResourceGroup サーバーが属するリソース グループの名前
ResourceProvider リソース プロバイダーの名前。 常に MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId リソース URI
Resource サーバーの名前 (大文字)
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s サーバーの名前
event_class_s table_access_log
event_subclass_s READINSERTUPDATE、または DELETE
connection_id_d MySQL によって生成された一意の接続 ID
db_s アクセスしたデータベースの名前
table_s アクセスしたテーブルの名前
sql_text_s 完全なクエリ テキスト
\_ResourceId リソース URI

Azure Monitor ログのログを分析する

監査ログが診断ログによって Azure Monitor ログにパイプされたら、監査されたイベントの詳細な分析を実行できます。 使用を開始する際に役立つサンプル クエリを以下にいくつか示します。 以下を、お使いのサーバー名で更新してください。

  • 特定のサーバーの GENERAL イベントを一覧表示する

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_class_s == "general_log"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | order by TimeGenerated asc nulls last
    
  • 特定のサーバー上の CONNECTION_V2 イベントを一覧表示します。status_d 列は、接続中にクライアント アプリケーションで直面したクライアント接続のエラー コードを示します。

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_subclass_s == "CONNECT"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, user_s, ip_s, status_d
    | order by TimeGenerated asc nulls last
    
  • 特定のサーバーの CONNECTION イベントを一覧表示する

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs' and event_class_s == "connection_log"
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | order by TimeGenerated asc nulls last
    
  • 特定のサーバーの監査されたイベントを集計する

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | summarize count() by event_class_s, event_subclass_s, user_s, ip_s
    
  • 特定のサーバーの監査イベントの種類の分布をグラフ化する

    AzureDiagnostics
    | where Resource  == '<your server name>' //Server name must be in Upper case
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | summarize count() by Resource, bin(TimeGenerated, 5m)
    | render timechart
    
  • 監査ログに対して診断ログが有効になっているすべての Azure Database for MySQL フレキシブル サーバー インスタンス全体の監査イベントを一覧表示します

    AzureDiagnostics
    | where Category == 'MySqlAuditLogs'
    | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s
    | order by TimeGenerated asc nulls last
    

次のステップ