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

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

重要

適用於 MySQL 的 Azure 資料庫單一伺服器位於淘汰路徑上。 強烈建議您升級至適用於 MySQL 的 Azure 資料庫彈性伺服器。 如需移轉至適用於 MySQL 的 Azure 資料庫彈性伺服器的詳細資訊,請參閱 適用於 MySQL 的 Azure 資料庫單一伺服器會發生什麼事?

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

設定稽核記錄

重要

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

預設會停用稽核記錄。 若要啟用它,請將 設定 audit_log_enabled 為 ON。

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

  • 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 = demouserdemouseraudit_log_exclude_users = ,使用者將會包含在稽核記錄中,因為 audit_log_include_users 優先順序較高。

事件 說明
CONNECTION - 連線初始化 (成功或失敗)
- 會話期間以不同使用者/密碼重新驗證使用者
- 連線終止
DML_SELECT SELECT 查詢
DML_NONSELECT INSERT/DELETE/UPDATE 查詢
DML DML = DML_SELECT + DML_NONSELECT
DDL 查詢,例如「DROP DATABASE」
DCL 查詢,例如「授與許可權」
ADMIN 查詢,例如「顯示狀態」
GENERAL 全部都位於 DML_SELECT、DML_NONSELECT、DML、DDL、DCL 和 ADMIN
TABLE_ACCESS - 適用于 MySQL 5.7 和 MySQL 8.0
- 資料表讀取語句,例如 SELECT 或 INSERT INTO ...選擇
- 資料表刪除語句,例如 DELETE 或 TRUNCATE TABLE
- 資料表插入語句,例如 INSERT 或 REPLACE
- 資料表更新語句,例如 UPDATE

存取稽核記錄

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

注意

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

診斷記錄架構

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

連線

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

一般

下列架構適用于一般、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 LOG、 、 ERRORRESULT (僅適用于 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 監視器記錄,您就可以對稽核的事件執行進一步分析。 以下是一些可協助您開始使用的範例查詢。 請務必使用您的伺服器名稱更新下列內容。

  • 列出特定伺服器上的一般事件

    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
    

下一步