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 |
CONNECT 、DISCONNECT |
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 |
LOG 、ERROR 、RESULT |
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