適用於 MySQL 的 Azure 資料庫中的稽核記錄

適用於: 適用於 MySQL 的 Azure 資料庫 - 單一伺服器

在適用於 MySQL 的 Azure 資料庫中,使用者可以使用稽核記錄。 稽核記錄可以用來追蹤資料庫層級的活動,而且經常因為合規性而使用它。

設定稽核記錄

重要

建議只記錄稽核所需的事件類型和使用者,以確保伺服器的效能不會受到嚴重影響並收集最少量的資料。

稽核記錄預設為停用。 若要加以啟用,請將 audit_log_enabled 設定為「開啟」。

您可以調整的其他參數包含:

  • audit_log_events:控制要記錄的事件。 如需特定稽核事件,請參閱下表。
  • audit_log_include_users:要納入記錄的 MySQL 使用者。 此參數的預設值是空的,其中包含所有要記錄的使用者。 此參數的優先順序高於 audit_log_exclude_users。 參數的長度上限為 512 個字元。
  • audit_log_exclude_users:要從記錄中排除的 MySQL 使用者。 參數的長度上限為 512 個字元。

注意

audit_log_include_users 的優先順序高於 audit_log_exclude_users。 例如,如果 audit_log_include_users = demouseraudit_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 都在 DML_SELECT、DML_NONSELECT、DML、DDL、DCL 和 ADMIN 中
TABLE_ACCESS - 適用於 MySQL 5.7 和 MySQL 8.0
- 資料表讀取陳述式,例如 SELECT 或 INSERT INTO ... SELECT
- 資料表刪除陳述式,例如 DELETE 或 TRUNCATE TABLE
- 資料表插入陳述式,例如 INSERT 或 REPLACE
- 資料表更新陳述式,例如 UPDATE

存取稽核記錄

稽核記錄會與 Azure 監視器診斷記錄整合。 一旦您已在 MySQL 伺服器上啟用稽核記錄,就可以將其發出至 Azure 監視器記錄、事件中樞或 Azure 儲存體。 若要深入了解如何在 Azure 入口網站中啟用診斷記錄,請參閱稽核記錄入口網站文章

注意

如果透過診斷和設定將記錄傳送至 Azure 儲存體,則不支援進階儲存體帳戶

診斷記錄結構描述

下列各節說明 MySQL 稽核記錄根據事件類型產生的輸出內容。 視輸出方法而定,包含的欄位及其出現的順序可能有所不同。

Connection

屬性 說明
TenantId 您的租用戶識別碼
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 CONNECTDISCONNECTCHANGE USER (只適用於 MySQL 5.7)
connection_id_d MySQL 所產生的唯一連線識別碼
host_s Blank
ip_s 連線到 MySQL 的用戶端 IP 位址
user_s 執行查詢的使用者名稱
db_s 連線的目的地資料庫名稱
\_ResourceId 資源 URI

一般

下列結構描述適用於 GENERAL、DML_SELECT、DML_NONSELECT、DML、DDL、DCL 和 ADMIN 事件類型。

注意

對於 sql_text,如果記錄超過 2048 個字元,將會遭到截斷。

屬性 說明
TenantId 您的租用戶識別碼
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 LOGERRORRESULT (只適用於 MySQL 5.6)
event_time UTC 時間戳記中的查詢開始時間
error_code_d 查詢失敗時的錯誤碼。 0 表示沒有錯誤
thread_id_d 執行查詢的執行緒識別碼
host_s Blank
ip_s 連線到 MySQL 的用戶端 IP 位址
user_s 執行查詢的使用者名稱
sql_text_s 完整查詢文字
\_ResourceId 資源 URI

資料表存取

注意

只有 MySQL 5.7 會輸出資料表存取記錄。
對於 sql_text,如果記錄超過 2048 個字元,將會遭到截斷。

屬性 說明
TenantId 您的租用戶識別碼
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 READINSERTUPDATEDELETE
connection_id_d MySQL 所產生的唯一連線識別碼
db_s 存取的資料庫名稱
table_s 存取的資料表名稱
sql_text_s 完整查詢文字
\_ResourceId 資源 URI

分析 Azure 監視器記錄中的記錄

透過診斷記錄將稽核記錄輸送至 Azure 監視器記錄後,您即可對稽核事件執行進一步分析。 以下是可協助您開始使用的樣本查詢。 務必以您的伺服器名稱更新以下內容。

  • 列出特定伺服器上的 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
    

後續步驟