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