MySQL 資料庫稽核

本主題說明 MySQL 適用的 Cloud SQL 資料庫稽核功能,以及 MySQL 適用的 Cloud SQL 稽核外掛程式。如要立即使用資料庫稽核功能,請參閱「使用 MySQL 資料庫稽核功能」。

什麼是資料庫稽核?

資料庫稽核功能可讓您追蹤資料庫中的特定使用者動作,例如更新資料表、讀取查詢、授予使用者權限等。如果機構基於安全考量需要追蹤使用者活動,或是為了遵守各種金融、政府和 ISO 法規,資料庫稽核就非常實用。資料庫稽核功能支援 MySQL 5.7 和 8.0 適用的 Cloud SQL。

MySQL 適用的 Cloud SQL 稽核外掛程式

資料庫稽核功能是由 MySQL 適用的 Cloud SQL 稽核外掛程式或 cloudsql_mysql_audit 啟用。這個外掛程式會使用開放的 MySQL 稽核 API 監控及記錄 MySQL 中的活動。外掛程式會將記錄傳送至 Cloud Logging 資料存取稽核記錄。稽核記錄可能相當龐大,因此資料存取稽核記錄預設為停用。您必須明確啟用記錄,才能使用外掛程式。

外掛程式啟用後,系統會套用您建立的現有稽核規則,為資料庫產生稽核記錄。外掛程式停用後,系統就不會產生稽核記錄。

如要進一步瞭解 MySQL 外掛程式,請參閱「MySQL 伺服器外掛程式」。

誰會使用資料庫稽核?

資料庫稽核涉及三種使用者:

  • 管理員:負責管理資料庫的使用者。 管理員是稽核使用者,負責在執行個體上啟用及停用稽核功能,以及建立新使用者。並授予稽核人員稽核權限。管理員也可以建立、刪除及更新稽核規則。
  • 稽核人員 - 具備建立、刪除及更新稽核規則權限的使用者。管理員會授予存取權。
  • 用戶端:透過稽核規則稽核活動的使用者,但他們不是稽核使用者,也沒有管理或稽核權限。存取權由管理員控管。

管理員和稽核人員也稱為稽核使用者。

稽核規則

資料庫稽核功能會使用稽核規則,定義應觸發稽核記錄建立作業的使用者、資料庫、物件、作業和狀態組合。稽核規則包含下列資訊:

  • Id - 自動編號規則 ID。建立稽核規則時,系統會自動指派稽核 ID 給每條規則。稽核 ID 一經建立即無法變更。
  • 使用者名稱 - 以半形逗號分隔的使用者和/或萬用字元模式清單。 您可以使用星號 (*) 做為使用者和主機的萬用字元。星號可做為字尾、前置字串,或同時做為兩者。此外,使用者只能在主機中使用萬用字元 %。長度上限為 2048 個半形字元。
  • Dbname:以半形逗號分隔的資料庫名稱和/或萬用字元模式清單。您可以將星號 (*) 做為使用者和主機的萬用字元。星號可做為字尾、字首或兩者皆是。最多 2048 個半形字元。
  • 物件:以半形逗號分隔的資料庫物件 (資料表、函式、預存程序等) 名稱和/或萬用字元模式清單。您可以使用星號 (*) 做為使用者和主機的萬用字元。星號可做為字尾、前置字元或兩者皆是。最多 2048 個半形字元。
  • 作業 - 以半形逗號分隔的資料庫作業清單。外掛程式支援群組作業 (例如 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 會先將稽核記錄暫時寫入執行個體的磁碟,使用磁碟空間,記錄檔會以每秒 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 個,系統就無法建立或更新稽核規則。

不支援的操作

目前不支援下列作業。

  • 如果以所述方式使用,系統將不支援下列函式:

    • SELECT 查詢中,使用 UNIONINTERSECTWHERE 子句、巢狀查詢、子查詢等。
    • 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 位址篩選。

後續步驟