本主題說明如何啟用及使用 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 資料庫稽核。
- 請參閱資料庫稽核作業的完整清單。