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 用户。 最多允许对四个用户这样做。 参数的最大长度为 256 个字符。

注意

audit_log_include_users 的优先级高于 audit_log_exclude_users。 例如,如果 audit_log_include_users = demouser 并且 audit_log_exclude_users = demouser,则会将该用户包括在审核日志中,因为 audit_log_include_users 的优先级更高。

事件 描述
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 All in DML_SELECT, DML_NONSELECT, DML, DDL, DCL, and ADMIN

访问审核日志

审核日志与 Azure Monitor 诊断日志集成。 在 MariaDB 服务器上启用审核日志后,可以将它们发送到 Azure Monitor 日志、事件中心或 Azure 存储。 若要详细了解如何在 Azure 门户中启用诊断日志,请参阅审核日志门户文章

诊断日志架构

以下部分介绍了 MariaDB 审核日志基于事件类型输出的内容。 根据输出方法,包含的字段以及这些字段出现的顺序可能会有所不同。

连接

属性 说明
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
    

后续步骤