適用於 MySQL 的 Azure 資料庫中的稽核記錄
適用於: 適用於 MySQL 的 Azure 資料庫 - 單一伺服器
重要
適用於 MySQL 的 Azure 資料庫單一伺服器位於淘汰路徑上。 強烈建議您升級至適用於 MySQL 的 Azure 資料庫彈性伺服器。 如需移轉至適用於 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
= 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 |
都在 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 稽核記錄根據事件類型產生的輸出內容。 視輸出方法而定,包含的欄位及其出現的順序可能有所不同。
連線
屬性 | 說明 |
---|---|
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 |
一般
下列結構描述適用於 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 |
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 監視器記錄後,您即可對稽核事件執行進一步分析。 以下是可協助您開始使用的樣本查詢。 務必以您的伺服器名稱更新以下內容。
列出特定伺服器上的 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