本主題說明如何啟用及使用 MySQL 適用的 Cloud SQL 稽核外掛程式。如需總覽資訊,請參閱「MySQL 資料庫稽核」。如要進一步瞭解 MySQL 外掛程式,請參閱 MySQL 外掛程式載入。
事前準備
資料存取稽核記錄
啟用及設定資料存取稽核記錄。請參閱「設定資料存取稽核記錄」。
稽核使用者所需的權限
您必須具備稽核預存程序的 EXECUTE 權限,才能執行這些程序。如果管理員需要變更稽核員對稽核預存程序的存取權限,請在 mysql 用戶端中使用 GRANT 或 REVOKE 指令。如要瞭解使用者權限的詳細資訊,請參閱「MySQL 使用者權限」。舉例來說,如果管理員想授予名為 user 的稽核人員管理稽核規則的權限,可以使用下列陳述式授予權限:
CREATE USER 'user'@'%' IDENTIFIED BY 'password'; GRANT EXECUTE ON PROCEDURE mysql.cloudsql_list_audit_rule TO 'user'@'%';
如果該管理員之後想撤銷稽核人員的存取權,可以使用下列陳述式撤銷權限:
REVOKE ALL ON PROCEDURE mysql.cloudql_list_audit_rule FROM 'user'@'%';
根據預設,使用 Cloud SQL 建立的使用者 (IAM 使用者除外) 都是管理員,具備 FILE 和 SUPER 以外的所有權限,包括稽核預存程序的權限。根據預設,IAM 資料庫使用者沒有任何權限。
啟用 MySQL 適用的 Cloud SQL 稽核外掛程式
MySQL 適用的 Cloud SQL 稽核外掛程式 (cloudsql_mysql_audit) 可控管特定資料庫執行個體的稽核行為。如要使用外掛程式,請先在 Cloud SQL 執行個體上啟用外掛程式。
如要啟用 cloudsql_mysql_audit 外掛程式,請使用下列其中一種方法:
- --cloudsql_mysql_audit=ON- 告知伺服器啟用外掛程式。如果外掛程式無法初始化,伺服器會停用外掛程式並繼續執行。 
- --cloudsql_mysql_audit=FORCE- 告知伺服器啟用外掛程式,但如果外掛程式初始化失敗,伺服器就不會啟動。換句話說,這個選項會強制伺服器執行外掛程式 (啟用或完全不啟用)。 
- --cloudsql_mysql_audit=FORCE_PLUS_PERMANENT- 與 FORCE 類似,但也會防止外掛程式在執行階段卸載。如果使用者嘗試使用「UNINSTALL PLUGIN」(解除安裝外掛程式) 卸載外掛程式,就會發生錯誤。 
外掛程式的啟用狀態會顯示在 INFORMATION_SCHEMA.PLUGINS 資料表的 PLUGIN_STATUS 欄中。
控制台
- 
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。 
- 開啟執行個體並按一下 [編輯]。
- 向下捲動至「旗標」區段。
- 如要設定先前未在執行個體上設定的旗標,請按一下「新增旗標」,從下拉式選單中選擇 cloudsql_mysql_audit,然後將值設為ON。
- 按一下 [儲存] 以儲存變更。
- 在「總覽」頁面的「旗標」下方確認變更。
gcloud
取代下列項目:
- INSTANCE_NAME:要設定旗標的執行個體名稱。
gcloud sql instances patch INSTANCE_NAME \ --database-flags cloudsql_mysql_audit=ON
這項指令會覆寫先前設定的所有資料庫旗標。如要保留這些標記並新增標記,請在執行個體中加入要設定的所有標記值;未明確加入的標記會設為預設值。如果標記未設定任何值,請指定標記名稱,並在後方加上等號 (=)。
REST v1beta4
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
JSON 要求主體:
{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "ON"
      }
    ]
  }
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
REST v1
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id
JSON 要求主體:
{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "ON"
      }
    ]
  }
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
MySQL 適用的 Cloud SQL 稽核外掛程式設定
您可以使用下列旗標調整 MySQL 適用的 Cloud SQL 稽核外掛程式行為。所有旗標都可以變更,不必重新啟動資料庫。如要瞭解如何管理旗標,請參閱「設定資料庫旗標」。
- cloudsql_mysql_audit_data_masking_regex- 用於資料遮蓋的規則運算式,必須符合 Perl 相容規則運算式 (PCRE)。 - 根據預設,在輸出稽核記錄中,使用者密碼 ( - <psw>) 會以- ***密碼遮罩取代。- Regex 只會套用至使用 - cloudsql_mysql_audit_data_masking_cmds指定指令類型的陳述式。使用- gcloud時,您必須使用旗標檔案,設定含有複雜特殊字元的值。- 這個標記的預設值如下: - identified(?:/\*.*?\*/|\s)*?by(?:/\*.*?\*/|\s)*?(?:password)?(?:/\*.*?\*/| \s)*?['|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?\((?:/\*.*?\*/| \s)*?['|"](?<psw>.*?)(?<!\\)['|"](?:/\*.*?\*/|\s)*?\)|password(?:/\*.*?\*/| \s)*?(?:for(?:/\*.*?\*/|\s)*?\S+?)?(?:/\*.*?\*/|\s)*?=(?:/\*.*?\*/|\s)*?[ '|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?) (?<!\\)['|"] - 請參閱以下範例。 - 如果沒有 - cloudsql_mysql_audit_data_masking_regex,描述建立使用者指令的稽核記錄檔項目會如下所示:- {..."cmd":"create_user","query":"create user user1@'localhost' identified by 'pw'"} 
- 預設值為 - cloudsql_mysql_audit_data_masking_regex,因此相同的稽核記錄會變更為:- {..."cmd":"create_user","query":"create user user1@'localhost' identified by '***'"} 
- 如果將 - cloudsql_mysql_audit_data_masking_regex設為- (?<psw>.*),Cloud SQL 就能篩選所有查詢內容。- {..."cmd":"create_user","query":"***"} 
 
- cloudsql_mysql_audit_data_masking_cmds- 以半形逗號分隔的指令清單,資料遮蓋 regex (cloudsql_mysql_audit_data_masking_regex) 會套用至這些指令。設定空白字串 ( - "") 即可停止篩選。使用- gcloud時,您必須使用旗標檔案設定以半形逗號分隔的清單。預設值包含下列密碼子句的 MySQL 指令:- create_user,alter_user,grant,update 
- cloudsql_mysql_audit_max_query_length- 控制稽核記錄中記錄的查詢長度上限。如果不需要查看查詢詳細資料,可以使用 - 0,這樣查詢就不會記錄在稽核記錄中。這樣可節省記錄的儲存空間,進而降低費用。- -1表示沒有限制。預設值為- -1。
- cloudsql_mysql_audit_log_write_period- 記錄寫入期間。寫入器執行緒會在達到您為這個旗標選項設定的毫秒數,或緩衝區已滿時,將緩衝區內容寫入磁碟。如果將這個旗標選項設為 - 0,使用者執行緒就會強制等待寫入執行緒的通知,確認寫入作業已完成。預設值為- 500(毫秒)。
控制台
- 
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。 
- 開啟執行個體並按一下 [編輯]。
- 向下捲動至「旗標」區段。
- 如要設定先前未在執行個體上設定的旗標,請按一下「新增旗標」,然後從上方清單的下拉式選單中選擇資料庫旗標,並設定其值。
- 按一下 [儲存] 以儲存變更。
- 在「總覽」頁面的「旗標」下方確認變更。
gcloud
取代下列項目:
- INSTANCE_NAME:要設定旗標的執行個體名稱。
- FLAG_NAME:設定旗標的名稱。
- FLAG_VALUE:旗標要使用的值。
gcloud sql instances patch INSTANCE_NAME / --database-flags FLAG_NAME=FLAG_VALUE
REST v1beta4
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
JSON 要求主體:
{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "flag_name",
        "value": "flag_value"
      }
    ]
  }
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
REST v1
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id
JSON 要求主體:
{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "flag_name",
        "value": "flag_value"
      }
    ]
  }
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
設定資料庫稽核
管理稽核規則
Cloud SQL 會使用一組儲存程序,管理 MySQL 適用的 Cloud SQL 稽核外掛程式稽核規則。您可以使用四個預存程序來建立、列出、更新及刪除稽核規則。
每個預存程序都會傳回兩個變數:@outval 和 @outmsg。這些變數分別代表預存程序的狀態碼和錯誤訊息。您可以使用星號 (*) 做為萬用字元,搜尋使用者、主機、資料庫和資料表名稱。星號可做為後置字元、前置字元或兩者皆是。此外,您只能在主機中使用萬用字元 %。您可以使用反引號 (`) 指出應以字面意義使用字串。舉例來說,`ta*ble` 會完全相符。
如要讓新變更生效,您應使用輸入參數 reload_mode=1 執行預存程序,或呼叫 mysql.cloudsql_reload_audit_rule(1),讓新變更生效。
建立稽核規則
您可以使用 mysql.cloudsql_create_audit_rule 建立新的稽核規則。
如要建立稽核規則並在一次呼叫中重新載入,請使用下列陳述式:
CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',1, @outval,@outmsg);
SELECT @outval, @outmsg;
如要建立規則並在另一個呼叫中重新載入,請使用下列陳述式:
CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',0, @outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);
您可以使用上一個指令建立多個規則,然後一次重新載入所有變更。
下表列出舊版指令的輸入和輸出參數。
| 輸入參數 | |||
|---|---|---|---|
| 名稱 | 類型 | 說明 | 示例 | 
| user@host或user@ip | 字串 | 以半形逗號分隔的資料庫使用者清單,用於稽核。請使用 user@host或user@ip格式。 | user1@localhost、user1@*、user1@%、user@ip | 
| db | 字串 | 以半形逗號分隔的資料庫清單,用於稽核。 | db1,db2,db3* | 
| obj | 字串 | 以半形逗號分隔的資料庫物件清單,用於稽核。 | table1,table2,table3* | 
| ops | 字串 | 以半形逗號分隔的稽核資料庫動作清單。 | select,delete,insert | 
| op_result | 字串 | 稽核成功 (S)、失敗 (U) 或成功和失敗作業 (B)。 | S、U或B | 
| reload_mode | 整數 | 0則不會重新載入規則,1則會重新載入。 | 0或1 | 
| 輸出參數 | |||
|---|---|---|---|
| 名稱 | 類型 | 說明 | 示例 | 
| @outval | 整數 | 預存程序的狀態碼。 | 0代表成功,1代表失敗。 | 
| @outmsg | 字串 | 預存程序的錯誤訊息。 | 
稽核規則有下列限制:
| 限制 | |
|---|---|
| user、db、obj和ops的長度。 | 長度上限為 2048 個半形字元。 | 
| user、db、obj和ops的組合數量。 | 最多 1,000 種組合。舉例來說,稽核規則稽核 user1,user2、db1, db2、table1,table2和select,delete,會產生 2 x 2 x 2 x 2 = 16 種組合。 | 
列出稽核規則
稽核人員可以使用 mysql.cloudsql_list_audit_rule 列出既有的稽核規則。
如要列出稽核規則 1 和 2,請使用下列指令:
CALL mysql.cloudsql_list_audit_rule('1,2',@outval,@outmsg);
SELECT @outval, @outmsg;
如要列出所有稽核規則,請按照下列步驟操作:
CALL mysql.cloudsql_list_audit_rule('*',@outval,@outmsg);
SELECT @outval, @outmsg;
下表列出舊版指令的輸入和輸出參數。
| 輸入參數 | |||
|---|---|---|---|
| 名稱 | 類型 | 說明 | 示例 | 
| rule_id | 字串 | 以半形逗號分隔的規則 ID 清單 (要移除的規則)。 | 1,2,3 | 
| 輸出參數 | |||
|---|---|---|---|
| 名稱 | 類型 | 說明 | 示例 | 
| @outval | 整數 | 預存程序的狀態碼。 | 0代表成功,1代表失敗。 | 
| @outmsg | 字串 | 預存程序的錯誤訊息。 | 
更新稽核規則
您可以使用 mysql.cloudsql_update_audit_rule 更新現有的稽核規則。
如要更新稽核規則並在一次呼叫中重新載入,請使用下列陳述式:
CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',1,@outval,@outmsg);
SELECT @outval, @outmsg;
您可能想在重新載入規則前,於單一工作階段中更新多項稽核規則。您可以使用下列預存程序,在一個步驟中更新規則,然後在後續步驟中重新載入這些規則。
CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);
下表列出舊版指令的輸入和輸出參數。
| 輸入參數 | |||
|---|---|---|---|
| 名稱 | 類型 | 說明 | 示例 | 
| rule_id | 整數 | 要更新的規則 ID。 | 5 | 
| user@host | 字串 | 以半形逗號分隔的資料庫使用者清單,用於稽核。請使用 user@host 格式。 | user1@localhost,user1@*user1@% | 
| db | 字串 | 以半形逗號分隔的資料庫清單,用於稽核。 | db1,db2,db3* | 
| obj | 字串 | 以半形逗號分隔的資料庫物件清單,用於稽核。 | table1,table2,table3* | 
| ops | 字串 | 以半形逗號分隔的稽核資料庫動作清單。 | SELECT,DELETE,INSERT | 
| op_result | 字串 | 稽核作業成功 (S)、失敗 (U),或成功和失敗作業皆有 (B)。 | S、U或B | 
| reload_mode | 整數 | 0則不會重新載入規則,1則會重新載入。 | 0或1 | 
| 輸出參數 | |||
|---|---|---|---|
| 名稱 | 類型 | 說明 | 示例 | 
| @outval | 整數 | 預存程序的狀態碼。 | 0代表成功,1代表失敗。 | 
| @outmsg | 字串 | 預存程序的錯誤訊息。 | 
稽核規則有下列限制:
| 限制 | |
|---|---|
| user、db、obj和ops的長度。 | 長度上限為 2048 個半形字元。 | 
| user、db、obj和ops的組合數量。 | 最多 1,000 種組合。舉例來說,稽核規則稽核 user1,user2、db1, db2、table1,table2和select,delete,會產生 2 x 2 x 2 x 2 = 16 種組合。 | 
刪除稽核規則
您可以使用 mysql.cloudsql_delete_audit_rule 刪除現有的稽核規則。
如要刪除稽核規則並在一次呼叫中重新載入,請使用下列陳述式:
CALL mysql.cloudsql_delete_audit_rule('1,2',1,@outval,@outmsg);
SELECT @outval, @outmsg;
如要刪除規則並在另一個呼叫中重新載入,請使用下列陳述式:
CALL mysql.cloudsql_delete_audit_rule('1,2',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL cloudsql_reload_audit_rule(1);
先前的指令可讓您刪除多項規則,然後同時重新載入所有變更。
下表列出舊版指令的輸入和輸出參數。
| 輸入參數 | |||
|---|---|---|---|
| 名稱 | 類型 | 說明 | 示例 | 
| rule_id | 字串 | 以半形逗號分隔的規則 ID 清單 (要移除的規則)。 | 1,2,3 | 
| reload_mode | 整數 | 0則不會重新載入規則,1則會重新載入。 | 0或1 | 
| 輸出參數 | |||
|---|---|---|---|
| 名稱 | 類型 | 說明 | 示例 | 
| @outval | 整數 | 預存程序的狀態碼。 | 0代表成功,1代表失敗。 | 
| @outmsg | 字串 | 預存程序的錯誤訊息。 | 
作業群組
MySQL 適用的 Cloud SQL 稽核外掛程式支援在規則定義中使用作業群組,稽核活動集合。您可以使用下列作業群組,簡化稽核規則的建立程序。
| 作業群組 | 包含的作業 | 
|---|---|
| dql | select | 
| dml | delete、delete_multi、insert、insert_select、load、replace、replace_select、truncate、update、update_multi、 | 
| ddl | alter_db、alter_event、alter_function、alter_procedure、alter_table、alter_user、create_db、create_event、create_function、create_index、create_procedure、create_table、create_trigger、create_user、create_udf、create_view、drop_db、drop_event、drop_function、drop_index、drop_procedure、drop_table、drop_trigger、drop_user、drop_view、rename_table、rename_user | 
| dcl | grant、revoke、revoke_all | 
| show | show_binlog_events,show_create_func、show_create_proc、show_procedure_code、show_create_event、show_create_trigger、show_events、show_function_code、show_grants、show_relaylog_events、show_triggers、 | 
| call | call_procedure | 
查看 Cloud SQL 資料庫稽核記錄
在 Cloud Logging 中查看資料庫稽核記錄
如要查看資料庫稽核記錄,請先確認您已為專案啟用資料存取稽核記錄。系統會將特定執行個體產生的 MySQL 稽核記錄,以資料存取稽核記錄的形式傳送至 Cloud Logging。您可以透過記錄檔探索工具應用程式,查看產生的 MySQL 資料庫稽核記錄。
在記錄檔探索工具中,您可以使用下列查詢,透過「進階篩選器」介面,顯示特定 Cloud SQL 專案的所有 MySQL 資料庫稽核記錄。
更改下列內容:
- PROJECT_NAME:您要取得稽核記錄的專案名稱。
resource.type="cloudsql_database" logName="projects/PROJECT_NAME/logs/cloudaudit.googleapis.com%2Fdata_access" protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry"
或者,您也可以選取 cloudaudit.googleapis.com/data_access 記錄篩選器。
稽核記錄格式
稽核記錄包含下列欄位。
| 欄位名稱 | 說明 | ||||||
|---|---|---|---|---|---|---|---|
| msgType | 代表稽核記錄訊息類型的字串。 msgType的唯一值為activity。 | ||||||
| status | 作業狀態,可以是 success或unsuccessful。 | ||||||
| date | 稽核事件的產生時間戳記。 | ||||||
| threadId | MySQL 執行緒的 ID。 | ||||||
| queryId | MySQL 查詢的 ID。 | ||||||
| user | 代表用戶端傳送的使用者名稱的字串。這可能與 privUser 值不同。 | ||||||
| privUser | 字串,代表伺服器驗證用戶端身分的使用者。這是伺服器用於檢查權限的使用者名稱。這可能與使用者值不同。 | ||||||
| gcpIamAccount | 代表 GCP IAM 帳戶或服務帳戶的字串。 | ||||||
| ip | 代表用戶端 IP 位址的字串。 | ||||||
| host | 代表用戶端主機名稱的字串。 | ||||||
| errCode | 作業失敗的 MySQL 錯誤代碼。請參閱「 MySQL Server Error Message Reference」。 | ||||||
| cmd | 指出要使用的 SQL 陳述式 (作業類型) 的字串。例如 INSERT、UPDATE或DELETE。 | ||||||
| objects | 稽核物件。通常是表格。這個欄位包含物件的下列資訊: 
 | ||||||
| query | SQL 陳述式 (直接執行)。 | ||||||
| chunkCount | 如果稽核記錄查詢大小超過 cloudsql_mysql_audit_event_split_threshold(90,000),則為區塊總數。 | ||||||
| chunkIndex | 區塊的索引。 chunk_index從 1 開始。 | ||||||
| @type | 類型一律為 type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry。 | 
以下是稽核記錄項目的範例。
{
"msgType":"activity",
"status":"unsuccessful",
"date":"2021-11-11T06:16:16.163603Z",
"threadId":"750",
"queryId":"26763",
"user":"root",
"priv_user":"root",
"ip":"",
"host":"localhost",
"errCode":"1146",
"cmd":"select",
"objects":[{"db":"test","name":"t4","obj_type":"TABLE"}],
"query":"select * from test.t4",
"chunkCount":2,
"chunkIndex":2,
"@type":"type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry"
}
停用資料庫稽核功能
如要停用 Cloud SQL for MySQL 稽核外掛程式,您可以將資料庫旗標 cloudsql_mysql_audit 設為 OFF,或移除該旗標。
控制台
- 
前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。 
- 開啟執行個體並按一下 [編輯]。
- 向下捲動至「旗標」區段。
- 如要設定先前未在執行個體上設定的旗標,請按一下「新增旗標」,從下拉式選單中選擇 cloudsql_mysql_audit,然後將值設為OFF。
- 按一下 [儲存] 以儲存變更。
- 在「總覽」頁面的「旗標」下方確認變更。
gcloud
取代下列項目:
- INSTANCE_NAME:要設定旗標的執行個體名稱。
gcloud sql instances patch INSTANCE_NAME \ --database-flags cloudsql_mysql_audit=OFF
REST v1beta4
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
JSON 要求主體:
{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "OFF"
      }
    ]
  }
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
REST v1
使用任何要求資料之前,請先替換以下項目:
- project-id:專案 ID
- instance-id:執行個體 ID
HTTP 方法和網址:
PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id
JSON 要求主體:
{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "OFF"
      }
    ]
  }
}
如要傳送要求,請展開以下其中一個選項:
您應該會收到如下的 JSON 回應:
稽核規則範例
- 稽核所有使用者的所有活動: - CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg); 
- 稽核單一使用者的所有活動 - user1:- CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg); 
- 稽核所有使用者以「 - user」開頭的所有活動:- CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg); 
- 稽核所有使用者的所有 DML 作業: - CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg); 
- 稽核特殊資料庫「 - db1」的選取作業:- CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg); 
- 使用特殊字元 - db~1稽核資料庫的所有活動:- CALL mysql.cloudsql_create_audit_rule('*','`db~1`','*','*','B',1,@outval,@outmsg); 
- 稽核資料表 - db1.table1的選取和刪除作業:- CALL mysql.cloudsql_create_audit_rule('*','db1','table1','select,delete','B',1,@outval,@outmsg); 
- 稽核所有成功執行的作業: - CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg); 
- 不要稽核所有使用者以 - user開頭的所有活動:- CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','E',1, @outval,@outmsg); 
疑難排解
| 問題 | 疑難排解 | 
|---|---|
| 我無法在叫用下列指令時看到 cloudsql_mysql_audit:SHOW (global) variables | cloudsql_mysql_audit是外掛程式的名稱。如要檢查是否已啟用,請使用下列指令:SHOW PLUGINS 並檢查 status項目。 | 
| 啟用 cloudsql_mysql_audit後,為什麼我無法查看 MySQL 稽核記錄? | 您必須啟用資料存取稽核記錄 (如「設定資料存取稽核記錄」一文所述)。此外,MySQL 適用的 Cloud SQL 稽核外掛程式也需要稽核規則,才能稽核所需的稽核記錄。使用 `reload_mode=1` 的預存程序建立稽核規則,或執行下列指令或重新啟動資料庫,讓新加入的稽核規則生效: CALL mysql.cloudsql_reload_audit_rule(1) | 
| 更新資料庫標記時,我看到下列錯誤: 錯誤 1193:不明系統變數 「cloudsql_mysql_audit_xxx」 | 只有在稽核外掛程式啟用時, cloudsql_mysql_audit_xxx標記才會生效。從執行個體移除所有現有的cloudsql_mysql_audit_xxx標記,然後使用下列指令開啟外掛程式,再更新cloudsql_mysql_audit_xxx標記:cloudsql_mysql_audit=ON | 
| 即使我未設定任何稽核規則,系統仍會產生稽核記錄。 | 根據預設,系統會記錄稽核規則資料表 ( mysql.audit_log_rules和mysql.audit_log_rules_expanded) 的變更,以及稽核預存程序 (mysql.cloudsql_xxxx_audit_rule)。 | 
| 我在主要執行個體上進行變更後,無法在副本執行個體上查看稽核記錄。 | 系統不會記錄複製執行緒和當機復原執行緒。 Cloud SQL 會稽核主要執行個體上的活動,但不會稽核備用執行個體上的活動。 | 
| 我嘗試使用下列指令,從以逗號分隔的清單設定值,但沒有作用。 gcloud instances patch --database-flags | 如果使用 gcloud指令指定以半形逗號分隔的旗標值清單,請使用--flags-file引數。首先,您需要建立包含下列資訊的檔案:--database-flags: general_log: OFF cloudsql_mysql_audit_max_query_length: '20' cloudsql_mysql_audit_data_masking_cmds: select,update 然後執行下列指令: gcloud sql instances patch --flags-file=flagfile | 
| 下列指令會傳回錯誤: CALL mysql.cloudsql_create_canonical_rules | 這是刻意設計的結果。 mysql.cloudsql_create_canonical_rules應僅由mysql.cloudsql_create_audit_rule 和mysql.cloudsql_update_audit_rule在內部呼叫。 | 
| 我可以稽核哪些作業? | 如要查看支援的作業,請參閱完整清單。由於不會影響資料庫,因此系統不會稽核部分作業,例如: USE db_name 或 SHOW VARIABLES 此外,在某些情況下,函式無法以物件形式稽核 (不支援的功能)。 | 
| 我想稽核特定資料表的所有作業,因此建立了下列稽核規則: mysql.cloudsql_create_audit_rule("user@*","db",
                "table","*","B",1,@1,@2);但我看到與這個資料表無關的稽核記錄,例如 disconnect和connect。 | 部分作業 (例如中斷連線或連線) 屬於全域作業。並忽略輸入的 db和object欄位。 | 
| 使用預存程序建立、更新或刪除稽核規則時,我看到下列錯誤。 MySQL 伺服器與 read-only選項搭配執行,所以無法執行此陳述式。 | Cloud SQL 無法變更唯讀執行個體上的預存程序。如果執行個體是主要執行個體,請移除 read_only旗標。如果執行個體是副本執行個體,請在主要執行個體上進行變更。規則變更複製到副本執行個體後,請在副本執行個體上執行下列指令,將規則重新載入副本:CALL mysql.cloudsql_reload_audit_rule(1) | 
| 建立、更新或刪除稽核規則時,即使變更成功,我還是會看到下列錯誤訊息。 0 rows affected | 0 rows affected回應適用於預存程序中執行的最後一個陳述式,而非表格。如要查看稽核規則是否已變更,請使用下列指令:mysql.cloudsql_list_audit_rule | 
| 我無法設定 cloudsql_mysql_audit_data_masking_cmds和cloudsql_mysql_audit_data_masking_regexp,因為gcloud。 | gcloud必須使用--flags-file引數設定複雜的旗標值 (包含特殊字元的旗標)。 | 
| 我使用 CREATE USER陳述式建立預存程序,但密碼未經過遮蓋。 | 根據預設,遮蓋功能只適用於 cmds(作業),例如:、 、 CREATE_USER、ALTER_USER、GRANT、UPDATE。如要在建立預存程序時篩選密碼,請在 cloudsql_mysql_audit_data_masking_cmds中新增create_procedure。 | 
| 嘗試建立、更新或刪除稽核規則時,我收到鎖定等待逾時錯誤。 | 通常,如果兩個以上的工作階段嘗試同時修改稽核規則,就會發生這個錯誤。如果這種情況經常發生,請增加 innodb_lock_wait_timeout變數的值。您可以全域增加 (使用資料庫標記),或只針對工作階段增加,例如使用下列指令:SET innodb_lock_wait_timeout=120 | 
後續步驟
- 進一步瞭解 MySQL 資料庫稽核。
- 請參閱資料庫稽核作業的完整清單。