Azure Database for MySQL の監査ログ
適用対象: Azure Database for MySQL - シングル サーバー
重要
Azure Database for MySQL の単一サーバーは提供終了パスにあります。 Azure Database for MySQL フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for MySQL フレキシブル サーバーへの移行の詳細については、「Azure Database for MySQL 単一サーバーの動作」を参照してください 。
Azure Database for MySQL では、ユーザーは監査ログを使用できます。 監査ログは、データベースレベルのアクティビティを追跡するために使用でき、コンプライアンスのためによく使用されます。
監査ログを構成する
重要
サーバーのパフォーマンスに大きな影響が出ないように最小限のデータが収集されるように、監査のために必要なイベントの種類とユーザーのみをログに記録することをお勧めします。
既定では、監査ログは無効です。 有効にするには、audit_log_enabled
を ON に設定します。
調整できるその他のパラメーターは次のとおりです。
audit_log_events
: 記録するイベントを制御します。 特定の監査イベントについては、次のを参照してください。audit_log_include_users
:ログ記録の対象となる MySQL ユーザー。 このパラメーターの既定値は空で、すべてのユーザーがログに記録されます。 優先順位は、audit_log_exclude_users
より高くなっています。 パラメーターの最大長は 512 文字です。audit_log_exclude_users
:ログ記録から除外する MySQL ユーザー。 パラメーターの最大長は 512 文字です。
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 |
- 接続開始 (成功または失敗) - 異なるユーザーとパスワードを使用するセッション中のユーザーの再認証 - 接続終了 |
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 |
- MySQL 5.7 および MySQL 8.0 で使用可能 - Standard Edition LECT や IN Standard Edition RT INTO ..などのテーブル読み取りステートメントStandard Edition LECT - DELETE や TRUNCATE TABLE などのテーブル削除ステートメント - IN Standard Edition RT や REPLACE などのテーブル挿入ステートメント - テーブル更新ステートメント。たとえば、UPDATE |
監査ログにアクセスする
監査ログは、Azure Monitor の診断ログと統合されます。 MySQL サーバーで監査ログを有効にしたら、Azure Monitor ログ、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 (MySQL 5.7 でのみ利用可能) |
connection_id_d |
MySQL によって生成された一意の接続 ID |
host_s |
空白 |
ip_s |
MySQL に接続しているクライアントの IP アドレス |
user_s |
クエリを実行しているユーザーの名前 |
db_s |
接続先のデータベースの名前 |
\_ResourceId |
リソース URI |
全般
以下のスキーマは、GENERAL、DML_SELECT、DML_NONSELECT、DML、DDL、DCL、および ADMIN の各イベントの種類に適用されます。
注意
sql_text
の場合、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 |
テーブル アクセス
注意
テーブル アクセス ログは、MySQL 5.7 のみに関する出力です。sql_text
の場合、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 LogicalServerName_s == '<your server name>' | where Category == 'MySqlAuditLogs' and event_class_s == "general_log" | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | order by TimeGenerated asc nulls last
特定のサーバーの CONNECTION イベントを一覧表示する
AzureDiagnostics | where LogicalServerName_s == '<your server name>' | where Category == 'MySqlAuditLogs' and event_class_s == "connection_log" | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | order by TimeGenerated asc nulls last
特定のサーバーの監査されたイベントを集計する
AzureDiagnostics | where LogicalServerName_s == '<your server name>' | where Category == 'MySqlAuditLogs' | project TimeGenerated, LogicalServerName_s, 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 LogicalServerName_s == '<your server name>' | where Category == 'MySqlAuditLogs' | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | summarize count() by LogicalServerName_s, bin(TimeGenerated, 5m) | render timechart
監査ログに対して診断ログが有効になっているすべての MySQL サーバーで監査されたイベントを一覧表示する
AzureDiagnostics | where Category == 'MySqlAuditLogs' | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | order by TimeGenerated asc nulls last