本主題說明 MySQL 適用的 Cloud SQL 資料庫稽核功能,以及 MySQL 適用的 Cloud SQL 稽核外掛程式。如要立即使用資料庫稽核功能,請參閱「使用 MySQL 資料庫稽核功能」。
什麼是資料庫稽核?
資料庫稽核功能可讓您追蹤資料庫中的特定使用者動作,例如更新資料表、讀取查詢、授予使用者權限等。資料庫稽核功能適用於需要為安全性或遵守各種金融、政府和 ISO 法規而保留使用者活動記錄的機構。Cloud SQL 適用的 MySQL 5.7 和 8.0 支援資料庫稽核功能。
Cloud SQL for MySQL 稽核外掛程式
資料庫稽核功能可透過 MySQL 適用的 Cloud SQL 稽核外掛程式或 cloudsql_mysql_audit
啟用。這個外掛程式會使用開放的 MySQL 稽核 API,監控並記錄 MySQL 中的活動。外掛程式會將記錄傳送至 Cloud Logging 資料存取稽核記錄。資料存取稽核記錄可能相當大,因此這類記錄預設為停用。您必須明確啟用記錄才能使用外掛程式。
外掛程式啟用後,系統會套用您建立的現有稽核規則,為資料庫產生稽核記錄。停用外掛程式後,系統就不會產生稽核記錄。
如要進一步瞭解 MySQL 外掛程式,請參閱「MySQL 伺服器外掛程式」。
誰會使用資料庫稽核功能?
資料庫稽核作業涉及三種類型的使用者:
- 管理員:負責管理資料庫的使用者。管理員是稽核使用者,負責在執行個體上啟用/停用稽核,以及建立新使用者。並授予稽核人員稽核權限。管理員也可以建立、刪除及更新稽核規則。
- 稽核人員:具備建立、刪除及更新稽核規則權限的使用者。並由管理員授予存取權。
- 客戶:活動會透過稽核規則稽核,但本身並非稽核使用者,也沒有管理或稽核權限的使用者。並由管理員管理存取權。
管理員和稽核人員也稱為稽核使用者。
稽核規則
資料庫稽核功能會使用稽核規則,定義應觸發稽核記錄建立作業的使用者、資料庫、物件、作業和狀態組合。稽核規則包含以下資訊:
- Id:自動數值規則 ID。每個稽核規則在建立時,系統都會自動指派稽核 ID。稽核 ID 建立後即無法變更。
- 使用者名稱:以半形逗號分隔的使用者和/或萬用字元模式清單。您可以使用星號 (
*
) 做為使用者和主機的萬用字元。使用星號做為字尾或字首,或同時使用兩者。此外,使用者只能在主機名稱中使用萬用字元 %。長度上限為 2048 個半形字元。 - Dbname:以半形逗號分隔的資料庫名稱和/或萬用字元模式清單。您可以使用星號 (
*
) 做為使用者和主機的萬用字元。使用星號做為字尾或字首,或同時使用兩者。長度上限為 2048 個半形字元。 - 物件:以半形逗號分隔的資料庫物件 (資料表、函式、儲存程序等) 名稱和/或萬用字元模式清單。您可以使用星號 (
*
) 做為使用者和主機的萬用字元。使用星號做為字尾或字首,或同時使用兩者。長度上限為 2048 個半形字元。 - Operation:以半形逗號分隔的資料庫作業清單。外掛程式支援所有作業的群組作業 (例如 DDL、DML 等)、單一作業 (例如更新、刪除等) 和萬用字元 (
*
)。請參閱支援的完整操作清單。外掛程式也支援作業群組,可用於稽核一組作業。長度上限為 2048 個半形字元。 Op_result:作業結果。
S
:稽核成功的作業U
:稽核失敗的作業B
:用於追蹤成功和失敗的作業E
:建立排他性規則
作業類型
作業類型是指您可以在資料庫中稽核的多種活動或作業類型:
DQL
- 讀取資料庫中的資料 (即SELECT
陳述式)DML
- 新增、刪除或修改資料DDL
- 建立或修改資料庫中的資料庫物件結構DCL
- 管理資料庫中使用者的權限Show
- 說明資料庫異議或提供資料庫狀態Call
- 叫用預存程序
影響稽核記錄的考量
備份
從備份或時間點復原 (PITR) 還原執行個體時,稽核規則也會回溯到備份或 PITR 的時間。這是因為稽核規則是儲存在資料庫中的資料之一,而規則稽核的目標 (使用者和物件) 也是如此。
唯讀備用資源
稽核規則會自動從主要執行個體複製到唯讀備用資源。客戶無法在讀取/寫入副本上新增、移除或修改稽核規則。如要變更副本的稽核規則,您必須更新主要執行個體的稽核規則。
如果您在主要執行個體上更新稽核記錄規則,就必須重新載入備用資源上的稽核規則,以確保新的稽核規則也能更新至唯讀備用資源。下列指令會重新載入稽核規則:
CALL mysql.cloudsql_reload_audit_rule(1)
使用者可以在備援執行個體上啟用稽核記錄,不受主要執行個體影響。在主要執行個體上變更設定後,您必須執行重新載入指令或重新啟動備用資源執行個體,讓稽核記錄規則生效。
稽核記錄失敗時的資料庫可用性
如果稽核作業失敗,Cloud SQL 不會停止資料庫活動的完成。舉例來說,如果執行個體的磁碟空間用盡,而 Cloud SQL 無法產生稽核記錄,資料庫仍會允許使用者執行讀取查詢,即使這項活動通常會產生稽核記錄也一樣。
唯讀執行個體
如果執行個體的 read_only
標記設為 true
,您就無法新增或更新稽核規則,因為稽核規則會儲存在資料表中。您必須先移除 read_only
標記,才能建立、更新或刪除規則。
限制與已知問題
記錄擷取率
在 Cloud SQL 將稽核記錄傳送至 Cloud Logging 之前,會先將稽核記錄暫時寫入執行個體的磁碟,使用磁碟空間。記錄會以每秒 4 MB 的速度上傳至 Cloud Logging,並從磁碟中移除。當記錄產生作業的負載超過上傳率時,執行個體的磁碟用量就會增加,這可能導致資料庫耗盡磁碟空間並當機。即使啟用自動增加磁碟儲存空間功能,磁碟用量增加也會導致成本增加。
使用這項功能時,建議您:
- 啟用自動增加儲存空間功能。
- 監控整體磁碟用量。您無法個別監控記錄產生的負載。在Metrics Explorer 中使用 cloudsql.googleapis.com/database/disk/utilization 指標。
- 如有需要,請限制資料庫活動或減少稽核作業,以降低記錄產生率。
稽核失敗的作業
如果稽核規則包含對失敗作業進行稽核 (op_result
設為 U
時為失敗作業,設為 B
時則為失敗和成功作業),部分使用者可能會透過持續執行失敗作業,讓稽核記錄過載資料庫執行個體。如果記錄產生速度超過記錄攝入率,可能會導致磁碟用量不必要地增加,進而耗盡磁碟空間。相反地,稽核失敗的作業時:
- 在執行個體層級控管存取權。
- 設定監控或快訊系統,以便在失敗作業記錄異常增加時發出警報。
稽核規則
每個資料庫執行個體最多只能建立 1,000 個稽核規則組合。稽核規則組合是使用者、資料庫、物件和作業的專屬組合。舉例來說,稽核規則會稽核 user1,user2
、db1,db2
、table1,table2
、select,delete
,產生 2 x 2 x 2 x 2 = 16 種組合。如果稽核規則組合的總數超過 1000,建立或更新稽核規則的作業就會失敗。
不支援的操作
目前不支援下列作業。
以下函式在下列情況下不受支援:
- 在使用
UNION
、INTERSECT
、WHERE
子句、巢狀查詢、子查詢等的SELECT
查詢中 - 在
UPDATE
、DELETE
、INSERT
、REPLACE
陳述式中。
舉例來說,如果您有稽核物件
func1
的稽核規則,則下列項目不會受到稽核:SELECT func1() FROM table;
SELECT * FROM table WHERE a = func1();
SELECT func1() != 0;
SELECT func1() > 0;
SET @x = func1();
系統會稽核由
SELECT
直接呼叫的函式,且該函式沒有任何運算子,也沒有WHERE
子句:SELECT func1();
SELECT db.func1();
- 在使用
目前不支援依 IP 位址篩選。
後續步驟
- 瞭解如何使用 MySQL 資料庫稽核功能。