SQL Server 資料庫稽核

在 SQL Server 適用的 Cloud SQL 中,SQL Server 稽核功能可讓您建立伺服器稽核規格,追蹤及記錄伺服器層級和資料庫層級事件。這項稽核功能可協助您監控機密資料的存取權、偵測可疑活動,並遵循法規。

如要稽核 SQL Server 適用的 Cloud SQL 執行個體的管理和維護作業,請參閱「Cloud 稽核記錄」。如要進一步瞭解 SQL Server 稽核功能,請參閱「SQL Server 稽核 (資料庫引擎)」。

事前準備

啟用資料庫稽核功能前,請先詳閱本節的最佳做法和必要條件。在許多情況下,您可能需要啟用自動增加儲存空間,以便儲存稽核檔案。磁碟空間需求會因稽核類型和保留間隔而異。

稽核檔案的 Cloud Storage bucket

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

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

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

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

啟用稽核功能

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

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

控制台

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

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 點選執行個體名稱,開啟執行個體的「Overview」(總覽) 頁面。
  3. 按一下 [編輯]。
  4. 在「Customize your instance」(自訂執行個體) 區段中,按一下「Flags and parameters」(旗標和參數)。
  5. 勾選「Enable SQL Server audit」(啟用 SQL Server 稽核) 旁的核取方塊。
  6. 指定 Cloud Storage bucket 做為稽核檔案的上傳位置。
  7. 按一下 [Advanced Options] (進階選項)。
  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:// 的 bucket 路徑 空白,因為稽核功能預設為停用。
--audit-retention-interval 選用。磁碟上稽核記錄的保留天數。 1 到 7 天。只能以天為單位。 7 天。
--audit-upload-interval 選用。上傳稽核記錄 (稽核檔案) 的頻率。 1 到 720 分鐘。 10 分鐘。

REST v1

您可以使用 REST API 啟用執行個體的稽核功能。如下列要求原型所示,您可以指定 Cloud Storage bucket、稽核檔案保留天數,以及稽核檔案上傳頻率。只有 bucket 位置是必要資訊。詳情請參閱 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 bucket、稽核檔案保留天數,以及稽核檔案上傳頻率。只有 bucket 位置是必要資訊。詳情請參閱 SqlServerAuditConfig:

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

停用稽核功能

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

以下是停用稽核功能的選項。

控制台

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

    前往「Cloud SQL Instances」(Cloud SQL 執行個體) 頁面

  2. 點選執行個體名稱,開啟執行個體的「Overview」(總覽) 頁面。
  3. 按一下 [編輯]。
  4. 在「Customize your instance」(自訂執行個體) 區段中,按一下「Flags and parameters」(旗標和參數)。
  5. 取消勾選「Enable SQL Server audit」(啟用 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 bucket。

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

建立伺服器稽核

啟用稽核功能後,預設的 sqlserver 使用者有權建立、修改及刪除伺服器稽核。

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

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

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

讀取稽核

以下各節將說明讀取稽核記錄的不同方式。

讀取執行個體的稽核記錄

如要從伺服器稽核建立的稽核檔案擷取資料,可以使用下列預存程序:msdb.dbo.gcloudsql_fn_get_audit_file。msdb.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%'

這個預存程序較適合中小型資料量。如要讀取大量資料的稽核記錄,建議您使用 Compute Engine 執行個體,從 Cloud Storage 讀取稽核記錄。

讀取 bucket 中的稽核記錄

如要讀取 Cloud Storage bucket 中的稽核記錄,可以將 bucket 中的檔案下載至 SQL Server 執行個體。SQL Server 執行個體可能位於:

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

bucket 中的稽核檔案應轉移至該執行個體可存取的位置,例如本機磁碟。接著,如要從稽核檔案傳回資訊,請使用 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 bucket
    • 在與執行個體相同的區域中設定目的地 Cloud Storage bucket
  • 使用 SQL Server 稽核功能前,建議您啟用自動增加儲存空間功能。稽核檔案可能需要大量磁碟空間,具體取決於檔案總大小和保留間隔。
  • 啟用稽核功能後,請確認執行個體可以將稽核檔案上傳至 Cloud Storage bucket。如果設定稽核的要求者不具備將檔案上傳至 Cloud Storage bucket 的必要權限,系統就不會自動授予權限。如要進一步瞭解權限,請參閱下列資源:
  • 設定指標警告政策,在上傳失敗和磁碟用量過高時通知您。
  • 為避免保留過多稽核檔案太久,請為 Cloud Storage bucket 設定資料保留政策。