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 |
CONNECT 、DISCONNECT 、CHANGE 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 |
LOG 、ERROR 、RESULT (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 |
READ 、INSERT 、UPDATE 、または 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