MySQL 資料庫稽核

本主題說明 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,user2db1,db2table1,table2select,delete,產生 2 x 2 x 2 x 2 = 16 種組合。如果稽核規則組合的總數超過 1000,建立或更新稽核規則的作業就會失敗。

不支援的操作

目前不支援下列作業。

  • 以下函式在下列情況下不受支援:

    • 在使用 UNIONINTERSECTWHERE 子句、巢狀查詢、子查詢等的 SELECT 查詢中
    • UPDATEDELETEINSERTREPLACE 陳述式中。

    舉例來說,如果您有稽核物件 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 位址篩選。

後續步驟