使用適用於 MySQL 的 Azure 資料庫 - 彈性伺服器中的稽核記錄來追蹤資料庫活動
適用於 MySQL 的 Azure 資料庫彈性伺服器可讓使用者設定稽核記錄。 可使用稽核記錄來追蹤資料庫等級活動,包括連線、管理員、DDL 和 DML 事件。 這些記錄類型通常用於合規性用途。
設定稽核記錄
重要
建議您只記錄稽核目的所需的事件類型和使用者,以確保伺服器的效能不會受到嚴重影響,而且會收集最少的數據量。
稽核記錄預設為停用。 若要啟用記錄,請將 audit_log_enabled
伺服器參數設為 [開啟]。 這可使用 Azure 入口網站或 Azure CLI 進行設定。
您可以調整其他參數,以控制稽核記錄行為,包括:
audit_log_events
:控制要記錄的事件。 如需特定稽核事件,請參閱下表。audit_log_include_users
:要納入記錄的 MySQL 使用者。 此參數的預設值是空的,其中包含所有要記錄的使用者。 此參數的優先順序高於audit_log_exclude_users
。 參數的長度上限為 512 個字元。 例如,的通配符值dev*
包含所有使用者,其項目開頭為 “dev
dev1,dev_user,dev_2”。 包含使用者的通配符專案的另一個範例在此範例中是*dev
,以 「stage_dev,prod_dev,user_dev」 等值結尾的所有用戶都會包含在稽核記錄專案中。 此外,模式中允許使用問號(?)
做為通配符。audit_log_exclude_users
:要從記錄中排除的 MySQL 使用者。 參數的最大長度為 512 個字元。 用戶通配符專案也接受以排除稽核記錄中的使用者。 例如,的stage*
通配符值會排除所有開頭為關鍵詞stage
的使用者,例如 “stage1,stage_user,stage_2”。 另一個排除使用者的*com
通配符專案範例在此範例中,以值com
結尾的所有用戶都會從稽核記錄專案中排除。 此外,模式中允許使用問號(?)
做為通配符。
注意
audit_log_include_users
的優先順序高於 audit_log_exclude_users
。 例如,如果 audit_log_include_users
= demouser
和 audit_log_exclude_users
= demouser
,使用者將會包含在稽核記錄中,因為 audit_log_include_users
的優先順序較高。
事件 | 說明 |
---|---|
CONNECTION |
- 聯機起始 - 連線終止 |
CONNECTION_V2 |
- 連線起始(成功或失敗的嘗試錯誤碼) - 連線終止 |
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 |
- 資料表讀取陳述式,例如 SELECT 或 INSERT INTO ...SELECT - 資料表刪除陳述式,例如 DELETE 或 TRUNCATE TABLE - 資料表插入陳述式,例如 INSERT 或 REPLACE - 資料表更新陳述式,例如 UPDATE |
存取稽核記錄
稽核記錄會與 Azure 監視器診斷設定整合。 一旦您已在彈性伺服器上啟用稽核記錄,就可以將其發出至 Azure 監視器記錄、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 |
connection_id_d |
MySQL 所產生的唯一連線識別碼 |
host_s |
Blank |
ip_s |
連線到 MySQL 的用戶端 IP 位址 |
user_s |
執行查詢的使用者名稱 |
db_s |
連線的目的地資料庫名稱 |
\_ResourceId |
資源 URI |
status_d |
CONNECTIONS_V2事件的連線 錯誤碼 專案。 |
一般
下列結構描述適用於 GENERAL、DML_SELECT、DML_NONSELECT、DML、DDL、DCL 和 ADMIN 事件類型。
注意
對於 sql_text_s
,如果記錄超過 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 |
資料表存取
注意
對於 sql_text_s
,如果記錄超過 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 Resource == '<your server name>' //Server name must be in Upper case | where Category == 'MySqlAuditLogs' and event_class_s == "general_log" | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | order by TimeGenerated asc nulls last
列出特定伺服器上的CONNECTION_V2事件,
status_d
數據行表示用戶端應用程式在連線時所面對的用戶端連線 錯誤碼 。AzureDiagnostics | where Resource == '<your server name>' //Server name must be in Upper case | where Category == 'MySqlAuditLogs' and event_subclass_s == "CONNECT" | project TimeGenerated, Resource, event_class_s, event_subclass_s, user_s, ip_s, status_d | order by TimeGenerated asc nulls last
列出特定伺服器上的 CONNECTION 事件
AzureDiagnostics | where Resource == '<your server name>' //Server name must be in Upper case | where Category == 'MySqlAuditLogs' and event_class_s == "connection_log" | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | order by TimeGenerated asc nulls last
摘要說明特定伺服器上的稽核事件
AzureDiagnostics | where Resource == '<your server name>' //Server name must be in Upper case | where Category == 'MySqlAuditLogs' | project TimeGenerated, Resource, 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 Resource == '<your server name>' //Server name must be in Upper case | where Category == 'MySqlAuditLogs' | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | summarize count() by Resource, bin(TimeGenerated, 5m) | render timechart
列出所有 適用於 MySQL 的 Azure 資料庫 彈性伺服器實例的稽核事件,並啟用稽核記錄的診斷記錄
AzureDiagnostics | where Category == 'MySqlAuditLogs' | project TimeGenerated, Resource, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | order by TimeGenerated asc nulls last