Azure Database for MariaDB での監査ログ

重要

Azure Database for MariaDB は、提供終了予定です。 Azure Database for MySQL に移行することを強くお勧めします。 Azure Database for MySQL への移行の詳細については、「Azure Database for MariaDB の現状」を参照してください

Azure Database for MariaDB では、ユーザーは監査ログを使用できます。 監査ログは、データベースレベルのアクティビティを追跡するために使用でき、コンプライアンスのためによく使用されます。

監査ログを構成する

重要

サーバーのパフォーマンスに大きな影響を与えないように、監査のために必要なイベントの種類とユーザーのみをログに記録することをお勧めします。

既定では、監査ログは無効です。 有効にするには、audit_log_enabled を ON に設定します。

調整できるその他のパラメーターは次のとおりです。

  • audit_log_events: 記録するイベントを制御します。 特定の監査イベントについては、次のを参照してください。
  • audit_log_include_users: ログ記録の対象となる MariaDB ユーザー。 このパラメーターの既定値は空で、すべてのユーザーがログに記録されます。 優先順位は、audit_log_exclude_users より高くなっています。 パラメーターの最大長は 512 文字です。
  • audit_log_exclude_users: ログ記録から除外する MariaDB ユーザー。 最大で 4 人のユーザーを指定できます。 パラメーターの最大長は 256 文字です。

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 のすべて

監査ログにアクセスする

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

診断ログのスキーマ

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

Connection

プロパティ 説明
TenantId テナント ID
SourceSystem Azure
TimeGenerated [UTC] ログが記録されたときのタイムスタンプ (UTC)
Type ログの種類。 常に AzureDiagnostics
SubscriptionId サーバーが属するサブスクリプションの GUID
ResourceGroup サーバーが属するリソース グループの名前
ResourceProvider リソース プロバイダーの名前。 常に MICROSOFT.DBFORMARIADB
ResourceType Servers
ResourceId リソース URI
Resource サーバーの名前
Category MySqlAuditLogs
OperationName LogEvent
event_class_s connection_log
event_subclass_s CONNECTDISCONNECT
connection_id_d MariaDB によって生成された一意の接続 ID
host_s 空白
ip_s MariaDB に接続しているクライアントの 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.DBFORMARIADB
ResourceType Servers
ResourceId リソース URI
Resource サーバーの名前
Category MySqlAuditLogs
OperationName LogEvent
LogicalServerName_s サーバーの名前
event_class_s general_log
event_subclass_s LOGERRORRESULT
event_time UNIX タイムスタンプのクエリ開始秒
error_code_d エラー コード (クエリが失敗した場合)。 0 は、エラーなしを意味します
thread_id_d クエリを実行したスレッドの ID
host_s 空白
ip_s MariaDB に接続しているクライアントの IP アドレス
user_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 
    
  • 監査ログに対して診断ログが有効になっているすべての MariaDB サーバーで監査されたイベントを一覧表示する

    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
    

次のステップ