为什么xp_cmdshell在SQL Server 2012中不起作用?

时间:2013-01-27 17:26:25

标签: sql-server sql-server-2012

  

可能重复:
  Enable ‘xp_cmdshell’ SQL Server

当我在SQL Server 2012中运行xp_cmdshell命令时,收到以下消息:

  

SQL Server阻止访问组件“xp_cmdshell”的过程“sys.xp_cmdshell”   因为此组件已关闭   作为此服务器的安全配置的一部分。   系统管理员可以启用'xp_cmdshell'的使用   通过使用sp_configure。有关启用'xp_cmdshell'的更多信息,   在SQL Server联机丛书中搜索“xp_cmdshell”。

但是,在SQL Server 2000中,此查询已成功执行。

2 个答案:

答案 0 :(得分:20)

从SQL Server 2005开始,当它们引入Surface Area Configuration Tool时,已禁用此功能,以便在默认情况下使SQL Server更安全。该工具已经停用,但您仍然可以使用sp_configure控制行为。 An example is shown on MSDN

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO

(我也是blogged about this many years ago。)

原因是这是一个潜在的安全漏洞。如果您允许SQL Server执行xp_cmdshell,那么理论上它们可以在那里发送任何操作系统命令,绕过您认为的所有安全性。当SQL Server服务帐户和/或代理帐户已升级到sysadmin或其他级别时,这尤其成问题,因为这比仅明确定义他们应该能够做的事情更容易。

不是启用它并禁用它以支持命令行交互,而是在对安全性有一定控制的同时公开操作系统功能的一种流行方法是使用SQL-CLR实现所需的操作系统级功能。这是a good starting point for accessing the file system with CLR(但如果你搜索一下,你会发现更现代和详尽的方法)。

答案 1 :(得分:3)

这是对sql server 2012的禁用。 但是您可以在sql server 2008中运行以下命令..

EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE