SQL Server 数据库审核

本页面介绍 Cloud SQL 中使用 SQL Server 审核功能的数据库审核。

概览

在 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. 如需打开实例的概览页面,请点击实例名称。
  3. 点击修改
  4. 自定义实例部分中,点击标志和参数
  5. 选中启用 SQL Server 审核旁边的复选框。
  6. 指定 Cloud Storage 存储桶作为审核文件上传到的目标位置。
  7. 点击高级选项
  8. (可选)指定日志保留的天数(1 到 7 天;默认为 7 天)。
  9. (可选)指定上传日志(审核文件)的频率,以分钟为单位(1-720 分钟;默认为 10 分钟)。
  10. 点击保存以应用更改。

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. 如需打开实例的概览页面,请点击实例名称。
  3. 点击修改
  4. 自定义实例部分中,点击标志和参数
  5. 取消选中启用 SQL Server 审核旁边的复选框。
  6. 点击保存以应用更改。

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%'

监控指标

您可以监控作为 Cloud SQL 指标(通过 Metrics Explorer 提供)一部分的审核相关操作:

  • database/sqlserver/audits_upload_count。此指标表示审核文件上传尝试(包括成功和失败的尝试)的总次数。检查此指标可监控上传是否成功。
  • database/sqlserver/audits_size。此指标指示测量时存储在实例上的审核文件使用的磁盘空间量。此指标提供了实例上审核文件的总大小(以字节为单位)。

最佳做法

  • 为避免跨区域转移大文件,请考虑以下做法:
    • 创建多区域 Cloud Storage 存储桶,或者
    • 在实例所在的区域中设置目标 Cloud Storage 存储桶
  • 在使用 SQL Server Audit 的功能之前,请考虑启用存储空间自动扩容功能。根据审核文件的总大小和保留期限,审核文件可能需要大量磁盘空间。
  • 启用审核后,验证您的实例可以将审核文件上传到 Cloud Storage 存储桶。如果设置审核的请求者缺少将文件上传到 Cloud Storage 存储桶所需的权限,则系统不会自动授予这些权限。
  • 设置基于指标的提醒政策,以便在上传尝试失败以及过度使用磁盘时收到通知。
  • 为避免过多的审核文件保留时间过长,请为 Cloud Storage 存储桶设置数据保留政策。