適用於 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
= demouser
和 demouser
audit_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 、 、 DISCONNECT CHANGE 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 、 、 ERROR RESULT (僅適用于 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 |
READ 、INSERT 、UPDATE 或 DELETE |
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