SQL Server 資料庫稽核

本頁面說明如何使用 SQL Server Audit 功能,在 Cloud SQL 中稽核資料庫。

總覽

在 Cloud SQL 中,SQL Server 稽核功能包括:

  • 建立伺服器稽核規格
  • 追蹤及記錄伺服器層級和資料庫層級事件

如要進一步瞭解 SQL Server 稽核功能,請參閱「SQL Server 稽核 (資料庫引擎)」。

事前準備

啟用資料庫稽核功能前,請先詳閱本節的必要條件。

稽核檔案的 Cloud Storage bucket

稽核檔案 (稽核記錄) 會上傳至 Cloud Storage bucket 位置。因此,您可能需要建立 Google Cloud 帳戶擁有的 bucket

或者,您也可以使用其他帳戶擁有的值區位置。啟用稽核後,如果您具備必要權限,系統會自動授予roles/storage.objectAdmin 角色,將稽核檔案上傳至指定服務帳戶的值區位置。如果您沒有必要權限,稍後必須授予服務帳戶。

可啟用稽核功能的有效使用者

如要啟用稽核功能及建立稽核規格,必須有預設 sqlserver 使用者。建立 Cloud SQL for SQL Server 執行個體時,系統會為您建立預設的 sqlserver 使用者。

啟用稽核功能

啟用稽核功能時,必須指定 Cloud Storage 位置。下列為選用項目:

  • 執行個體上的記錄保留期限
  • 上傳間隔 (上傳頻率)

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 按一下 [編輯]
  4. 在「自訂執行個體」部分,按一下「旗標和參數」
  5. 勾選「啟用 SQL Server 稽核」旁的核取方塊
  6. 指定 Cloud Storage bucket 做為稽核檔案的上傳位置。
  7. 點選「進階選項」。
  8. (選用) 指定記錄檔保留天數 (1 到 7 天;預設為 7 天)。
  9. 您也可以選擇指定記錄檔 (稽核檔案) 的上傳頻率 (以分鐘為單位,範圍為 1 到 720 分鐘,預設為 10 分鐘)。
  10. 按一下 [Save] (儲存) 套用您的變更。

gcloud

下列指令會啟用稽核功能:

gcloud sql instances patch INSTANCE_NAME --audit-bucket-path=gs://my-bucket --audit-retention-interval=24h --audit-upload-interval=10m

下表摘要說明這項作業的 gcloud 參數:

參數 說明 允許的值 預設值
--audit-bucket-path 這是必要旗標,稽核檔案的上傳位置 (Cloud Storage bucket)。 如果稽核功能已停用,則此欄位為空白。否則,值區路徑開頭為:gs:// 空白,因為稽核功能預設為停用。
--audit-retention-interval (選用步驟) 稽核記錄在磁碟上的保留天數。 1 到 7 天。只能輸入天數。 7 天。
--audit-upload-interval (選用步驟) 上傳稽核記錄 (稽核檔案) 的頻率。 1 到 720 分鐘。 10 分鐘。

REST v1

您可以使用 REST API 為執行個體啟用稽核功能。如下列要求原型所示,您可以指定 Cloud Storage 值區、稽核檔案保留天數,以及稽核檔案上傳頻率。只需要提供值區位置。詳情請參閱「 SqlServerAuditConfig」:

{
   "databaseVersion":"database-version",
   "name":"instance-id",
   "region":"region",
   "rootPassword":"password",
   "settings":{
      "tier":"machine-type",
      "sqlServerAuditConfig":{
         "bucket":"gs://mybucket",
         "retentionInterval":"24h",
         "uploadInterval":"10m"
      }
   }
}

REST v1beta4

您可以使用 REST API 為執行個體啟用稽核功能。如下列要求原型所示,您可以指定 Cloud Storage 值區、稽核檔案保留天數,以及稽核檔案上傳頻率。只需要提供值區位置。詳情請參閱「 SqlServerAuditConfig」:

{
   "databaseVersion":"database-version",
   "name":"instance-id",
   "region":"region",
   "rootPassword":"password",
   "settings":{
      "tier":"machine-type",
      "sqlServerAuditConfig":{
         "bucket":"gs://mybucket",
         "retentionInterval":"24h",
         "uploadInterval":"10m"
      }
   }
}

停用稽核功能

本節包含停用稽核的選項。停用稽核功能後,系統會從執行個體中刪除所有稽核檔案,包括尚未上傳的檔案。此外,所有伺服器稽核都會停用,如要繼續稽核,必須重新啟用。上傳至 Cloud Storage 值區的稽核記錄可能會保留,視該值區的保留設定而定。

以下是停用稽核的選項。

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 按一下 [編輯]
  4. 在「自訂執行個體」部分,按一下「旗標和參數」
  5. 取消勾選「啟用 SQL Server 稽核」旁的核取方塊。
  6. 按一下 [Save] (儲存) 套用您的變更。

gcloud

下列指令省略 --audit-bucket-path 參數的值,因此會停用稽核功能:

gcloud sql instances patch INSTANCE_NAME --audit-bucket-path=

REST v1

以下是停用稽核功能的原型要求,省略了 sqlServerAuditConfig 物件的欄位:

{
   "databaseVersion":"database-version",
   "name":"instance-id",
   "region":"region",
   "rootPassword":"password",
   "settings":{
      "tier":"machine-type",
      "sqlServerAuditConfig":{
      }
   }
}

REST v1beta4

以下是停用稽核功能的原型要求,省略了 sqlServerAuditConfig 物件的欄位:

{
   "databaseVersion":"database-version",
   "name":"instance-id",
   "region":"region",
   "rootPassword":"password",
   "settings":{
      "tier":"machine-type",
      "sqlServerAuditConfig":{
      }
   }
}

自動上傳稽核檔案

啟用稽核功能後,系統會自動將產生的稽核檔案上傳至您指定的 Cloud Storage 值區。

產生的稽核檔案也會與執行個體一起儲存,直到設定的保留期限 (間隔) 結束為止。超過這段時間後,稽核檔案就會永久刪除,即使是無法上傳的檔案也不例外。

建立伺服器稽核

啟用稽核功能後,預設 sqlserver 使用者就有權建立、變更及捨棄伺服器稽核。

使用 CREATE SERVER AUDIT 指令定義新的伺服器稽核。您也可以使用 SQL Server Management Studio (SSMS) 的使用者介面建立伺服器稽核。

所有伺服器稽核都會強制執行下列參數類別:

參數類別 允許的值
稽核記錄失敗時 繼續或失敗
稽核目的地 檔案
路徑 /var/opt/mssql/audit
檔案大小上限 2 至 50 MB
輪替檔案數量上限 必須為:未設定
檔案數量上限 必須為:未設定
預留磁碟空間 關閉

閱讀稽核

從執行個體讀取稽核記錄

如要從伺服器稽核建立的稽核檔案中擷取資料,可以使用下列預存程序:msdb.dbo.gcloudsql_fn_get_audit_filemsdb.dbo.gcloudsql_fn_get_audit_file 程序接受的參數與 sys.fn_get_audit_file 函式相同。

因此,如要瞭解如何使用該預存程序,請參閱 sys.fn_get_audit_file

以下是使用 msdb.dbo.gcloudsql_fn_get_audit_file 程序擷取稽核資料的範例:

SELECT event_time, statement FROM msdb.dbo.gcloudsql_fn_get_audit_file('/var/opt/mssql/audit/*', NULL, NULL) WHERE statement LIKE '%INSERT%'

從 bucket 讀取稽核記錄

如要從 Cloud Storage bucket 讀取稽核記錄,您可以將檔案從 bucket 下載至 SQL Server 執行個體。該 SQL Server 執行個體可以是:

  • Compute Engine Windows 執行個體
  • Compute Engine Linux 執行個體
  • 執行 SQL Server 的另一種執行個體

請將 bucket 中的稽核檔案傳輸到該執行個體可存取的位置,例如本機磁碟。然後,如要從稽核檔案傳回資訊,請使用伺服器管理員固定伺服器角色的成員,執行 sys.fn_get_audit_file 函式。舉例來說,如果您從 Windows 執行個體將稽核檔案傳輸至 D:\Audit,可以使用類似下列的指令:

SELECT event_time, statement FROM sys.fn_get_audit_file('D:\Audit\*.*', NULL, NULL) WHERE statement LIKE '%INSERT%'

監控指標

您可以透過 Metrics Explorer 監控稽核相關作業,這些作業是 Cloud SQL 指標的一部分:

  • database/sqlserver/audits_upload_count. 這項指標會顯示稽核檔案上傳嘗試次數總計,包括成功和失敗的嘗試。請查看這項指標,監控上傳作業是否成功。
  • database/sqlserver/audits_size. 這項指標表示執行個體儲存稽核檔案時所用的磁碟空間量。這項指標會提供執行個體上稽核檔案的總大小 (以位元組為單位)。

最佳做法

  • 為避免跨區域轉移大型檔案,請考慮採取下列做法:
    • 建立多區域 Cloud Storage 值區,或
    • 在與執行個體相同的區域中設定目標 Cloud Storage bucket
  • 使用 SQL Server 稽核功能前,請考慮啟用自動增加儲存空間功能。稽核檔案可能需要大量磁碟空間,具體取決於檔案總大小和保留間隔。
  • 啟用稽核功能後,請確認執行個體可將稽核檔案上傳至 Cloud Storage bucket。如果設定稽核的要求者沒有將檔案上傳至 Cloud Storage bucket 的必要權限,系統不會自動授予權限。
  • 設定以指標為依據的快訊政策,在上傳嘗試失敗和磁碟用量過高時收到通知。
  • 為避免保留過多稽核檔案太久,請為 Cloud Storage 值區設定資料保留政策。