有什么方法可以监视 SQL Server 2012 中 xp_cmdshell 的执行吗?

Els*_*mer 6 sql-server sql-server-2012

我的任务是评估允许第三方供应商在 SSMS 中远程调试其查询所涉及的安全风险。这意味着用户的帐户必须是 sysadmin 固定角色。虽然这意味着用户出于所有意图和目的“拥有”SQL Server 实例,但我们已将该实例设置为特定于该供应商的服务帐户。我只剩下主要评估使用 xp_cmdshell 可以造成的损害。

我知道系统管理员几乎可以撤消为监视该活动而实施的任何内容,但是如果有办法监视它(也许使用扩展事件?)和/或使用日志功能,它将为我们提供额外的安全级别。

小智 7

审计事件实际上不能通过扩展事件获得。您将需要使用 SQL Server Audit,它或多或少地在扩展事件引擎之上工作(至少从我的理解来看)。

使用步骤:

  1. 创建服务器审计
  2. 创建服务器审计规范
  3. 然后返回并启用它们。

在此处输入图片说明

通过 SSMS 使用 UI 来创建它们是相当直接的,但就本文而言,这将是 T-SQL 来做同样的事情:

USE [master]
GO

CREATE SERVER AUDIT [cmdshell-20150603-124954]
TO FILE 
(   FILEPATH = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL12\MSSQL\Log\' )
WHERE object_name = 'xp_cmdshell';
GO

CREATE SERVER AUDIT SPECIFICATION [Audit-cmdshell]
FOR SERVER AUDIT [cmdshell-20150603-124954]
ADD (SCHEMA_OBJECT_ACCESS_GROUP);
GO
Run Code Online (Sandbox Code Playgroud)

然后,当您返回并查看 Audit Collection 时,您会看到类似于以下内容的内容: 在此处输入图片说明

此外,关于被关闭的审核,您可以创建一个单独的服务器审核,当任何 SQL Server 审核被禁用或启动时,该审核将专门记录。这最多会给你谁阻止它。