SQL Server 資料庫稽核

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

總覽

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

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

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

事前準備

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

稽核檔案的 Cloud Storage 值區

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

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

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

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

啟用稽核功能

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

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

控制台

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「Overview」頁面,請按一下執行個體名稱。
  3. 按一下 [編輯]
  4. 在「自訂執行個體」部分,按一下「旗標和參數」
  5. 勾選「啟用 SQL Server 稽核」旁的核取方塊。
  6. 指定 Cloud Storage 值區做為稽核檔案上傳的位置。
  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 值區位置。 如果稽核功能已停用,則為空白。否則,值區路徑開頭為: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 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「Overview」(總覽) 頁面,請按一下執行個體名稱。
  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%'

讀取值區的稽核

如要讀取 Cloud Storage 值區中的稽核記錄,您可以將檔案從值區下載到 SQL Server 執行個體。該 SQL Server 執行個體可能為:

  • Compute Engine Windows 執行個體
  • Compute Engine Linux 執行個體
  • 執行 SQL Server 的其他類型執行個體

從儲存桶傳送的稽核檔案應轉移至可供該執行個體存取的位置,例如本機磁碟。接著,如要傳回稽核檔案中的資訊,請使用 serveradmin 固定伺服器角色的成員來執行 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 值區
  • 在使用 SQL Server 稽核功能前,請考慮啟用自動增加儲存空間功能。稽核檔案可能會占用大量磁碟空間,具體取決於檔案總大小和保留間隔。
  • 啟用稽核功能後,請確認執行個體可以將稽核檔案上傳至 Cloud Storage 值區。如果設定稽核作業的申請者缺少上傳檔案至 Cloud Storage 值區的必要權限,系統不會自動授予這些權限。
  • 設定以指標為依據的快訊政策,以便在上傳失敗和磁碟用量過高時通知您。
  • 為避免保留太多審計檔案,請為 Cloud Storage 值區設定資料保留政策。