使用 MySQL 資料庫稽核

本主題說明如何啟用及使用 MySQL 適用的 Cloud SQL 稽核外掛程式。如需總覽資訊,請參閱「MySQL 資料庫稽核」。如要進一步瞭解 MySQL 外掛程式,請參閱 MySQL 外掛程式載入

事前準備

資料存取稽核記錄

啟用及設定資料存取稽核記錄。請參閱「設定資料存取稽核記錄」。

稽核使用者所需的權限

您必須具備稽核預存程序的 EXECUTE 權限,才能執行這些程序。如果管理員需要變更稽核員對稽核預存程序的存取權限,請在 mysql 用戶端中使用 GRANTREVOKE 指令。如要瞭解使用者權限的詳細資訊,請參閱「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 使用者除外) 都是管理員,具備 FILESUPER 以外的所有權限,包括稽核預存程序的權限。根據預設,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 欄中。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 開啟執行個體並按一下 [編輯]
  3. 向下捲動至「旗標」區段。
  4. 如要設定先前未在執行個體上設定的旗標,請按一下「新增旗標」,從下拉式選單中選擇 cloudsql_mysql_audit,然後將值設為 ON
  5. 按一下 [儲存] 以儲存變更。
  6. 在「總覽」頁面的「旗標」下方確認變更。

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 (毫秒)。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 開啟執行個體並按一下 [編輯]
  3. 向下捲動至「旗標」區段。
  4. 如要設定先前未在執行個體上設定的旗標,請按一下「新增旗標」,然後從上方清單的下拉式選單中選擇資料庫旗標,並設定其值。
  5. 按一下 [儲存] 以儲存變更。
  6. 在「總覽」頁面的「旗標」下方確認變更。

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@hostuser@ip 字串 以半形逗號分隔的資料庫使用者清單,用於稽核。請使用 user@hostuser@ip 格式。

user1@localhost
user1@*
user1@%
user@ip
db 字串 以半形逗號分隔的資料庫清單,用於稽核。 db1,db2,db3*
obj 字串 以半形逗號分隔的資料庫物件清單,用於稽核。 table1,table2,table3*
ops 字串 以半形逗號分隔的稽核資料庫動作清單。 select,delete,insert
op_result 字串 稽核成功 (S)、失敗 (U) 或成功和失敗作業 (B)。 SUB
reload_mode 整數 0 則不會重新載入規則,1 則會重新載入。 01
輸出參數
名稱 類型 說明 示例
@outval 整數 預存程序的狀態碼。 0 代表成功,1 代表失敗。
@outmsg 字串 預存程序的錯誤訊息。

稽核規則有下列限制:

限制
userdbobjops 的長度。 長度上限為 2048 個半形字元。
userdbobjops 的組合數量。 最多 1,000 種組合。舉例來說,稽核規則稽核 user1,user2db1, db2table1,table2select,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)。 SUB
reload_mode 整數 0 則不會重新載入規則,1 則會重新載入。 01
輸出參數
名稱 類型 說明 示例
@outval 整數 預存程序的狀態碼。 0 代表成功,1 代表失敗。
@outmsg 字串 預存程序的錯誤訊息。

稽核規則有下列限制:

限制
userdbobjops 的長度。 長度上限為 2048 個半形字元。
userdbobjops 的組合數量。 最多 1,000 種組合。舉例來說,稽核規則稽核 user1,user2db1, db2table1,table2select,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 則會重新載入。 01
輸出參數
名稱 類型 說明 示例
@outval 整數 預存程序的狀態碼。 0 代表成功,1 代表失敗。
@outmsg 字串 預存程序的錯誤訊息。

作業群組

MySQL 適用的 Cloud SQL 稽核外掛程式支援在規則定義中使用作業群組,稽核活動集合。您可以使用下列作業群組,簡化稽核規則的建立程序。

作業群組 包含的作業
dql select
dml deletedelete_multiinsertinsert_selectloadreplacereplace_selecttruncateupdateupdate_multi
ddl alter_dbalter_eventalter_functionalter_procedurealter_tablealter_usercreate_dbcreate_eventcreate_functioncreate_indexcreate_procedurecreate_tablecreate_triggercreate_usercreate_udfcreate_viewdrop_dbdrop_eventdrop_functiondrop_indexdrop_proceduredrop_tabledrop_triggerdrop_userdrop_viewrename_tablerename_user
dcl grantrevokerevoke_all
show show_binlog_events, show_create_funcshow_create_procshow_procedure_codeshow_create_eventshow_create_triggershow_eventsshow_function_codeshow_grantsshow_relaylog_eventsshow_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 作業狀態,可以是 successunsuccessful
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 陳述式 (作業類型) 的字串。例如 INSERTUPDATEDELETE
objects 稽核物件。通常是表格。這個欄位包含物件的下列資訊:

db 代表預設資料庫名稱的字串。
name 代表物件名稱的字串。通常是資料表名稱。
objType 代表物件類型的字串。 原價 TABLE
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 或移除該旗標。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 開啟執行個體並按一下 [編輯]
  3. 向下捲動至「旗標」區段。
  4. 如要設定先前未在執行個體上設定的旗標,請按一下「新增旗標」,從下拉式選單中選擇 cloudsql_mysql_audit,然後將值設為 OFF
  5. 按一下 [儲存] 以儲存變更。
  6. 在「總覽」頁面的「旗標」下方確認變更。

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 回應:

稽核規則範例

  1. 稽核所有使用者的所有活動:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
  2. 稽核單一使用者的所有活動 user1

    CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
  3. 稽核所有使用者以「user」開頭的所有活動:

    CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
  4. 稽核所有使用者的所有 DML 作業:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
  5. 稽核特殊資料庫「db1」的選取作業:

    CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
  6. 使用特殊字元 db~1 稽核資料庫的所有活動:

    CALL mysql.cloudsql_create_audit_rule('*','`db~1`','*','*','B',1,@outval,@outmsg);
  7. 稽核資料表 db1.table1 的選取和刪除作業:

    CALL mysql.cloudsql_create_audit_rule('*','db1','table1','select,delete','B',1,@outval,@outmsg);
  8. 稽核所有成功執行的作業:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
  9. 不要稽核所有使用者以 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_rulesmysql.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);
但我看到與這個資料表無關的稽核記錄,例如 disconnectconnect
部分作業 (例如中斷連線或連線) 屬於全域作業。並忽略輸入的 dbobject 欄位。
使用預存程序建立、更新或刪除稽核規則時,我看到下列錯誤。

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_cmdscloudsql_mysql_audit_data_masking_regexp,因為 gcloud gcloud 必須使用 --flags-file 引數來設定複雜的旗標值 (包含特殊字元的旗標)。
我使用 CREATE USER 陳述式建立預存程序,但密碼未經過遮蓋。 根據預設,遮蓋功能只適用於 cmds (作業),例如:

CREATE_USERALTER_USERGRANTUPDATE

如要在建立預存程序時篩選密碼,請在 cloudsql_mysql_audit_data_masking_cmds 中新增 create_procedure
嘗試建立、更新或刪除稽核規則時,我收到鎖定等待逾時錯誤。 通常,如果兩個以上的工作階段嘗試同時修改稽核規則,就會發生這個錯誤。如果這種情況經常發生,請增加 innodb_lock_wait_timeout 變數的值。您可以全域增加 (使用資料庫標記),或只針對工作階段增加,例如使用下列指令:
SET innodb_lock_wait_timeout=120

後續步驟