如何检测更改范围配置的内容?

Mic*_*l B 4 sql-server sql-server-2016

我注意到我有一个不断重置范围配置的数据库,即 maxdop。

是否有任何日志显示谁或什么进程导致这些配置更改?我使用的是 Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) - 13.0.4466.4

Aar*_*and 5

好吧,您不会有任何历史记录,但是您可以在将来的行为中捕捉到这一点,因为 SQL Server Audit 可以使用DATABASE_OBJECT_CHANGE_GROUP以下方法执行此操作:

USE master;
GO

CREATE SERVER AUDIT ServerAudit
  TO FILE (FILEPATH = 'C:\path\to\audit\folder\', MAXSIZE = 1 GB)
  WITH (ON_FAILURE = CONTINUE);
GO

ALTER SERVER AUDIT ServerAudit
  WITH (STATE = ON);
GO
Run Code Online (Sandbox Code Playgroud)

现在,对于每个数据库:

USE database_name;
GO

CREATE DATABASE AUDIT SPECIFICATION CatchDBConfigChangers
  FOR SERVER AUDIT ServerAudit
  ADD (DATABASE_OBJECT_CHANGE_GROUP)
  WITH (STATE = ON);
GO
Run Code Online (Sandbox Code Playgroud)

您必须为每个数据库创建一个审计规范,这将收集的不仅仅是范围内的配置更改,但是一旦您设置了数据库,您就可以立即开始检查详细信息:

SELECT 
  [when]      = event_time,
  [app]       = application_name, 
  [host]      = host_name, 
  [ip]        = client_ip,
  [login]     = server_principal_name,
  [statement] 
FROM sys.fn_get_audit_file 
  ('C:\path\to\audit\folder\ServerAudit*', NULL, NULL)
WHERE LOWER([statement]) LIKE N'%scoped%configuration%'
-- AND database_name = N'database_name'
;
Run Code Online (Sandbox Code Playgroud)

一次更改后的结果MAXDOP点击放大):

在此处输入图片说明