7

可能重复:
启用“xp_cmdshell”SQL Server

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

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

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

4

2 回答 2

20

从 SQL Server 2005 开始,这已被禁用,当时他们引入了外围应用配置工具,以努力使 SQL Server 在默认情况下更加安全。该工具已停用,但您仍然可以使用sp_configure. 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

(我多年前也写过关于这个的博客。)

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

与其启用和禁用它以支持命令行交互,一种公开操作系统功能同时仍对安全性有一定控制权的流行方法是使用 SQL-CLR 实现所需的操作系统级功能。这是使用 CLR 访问文件系统的一个很好的起点(但是,如果您四处搜索,您会发现更现代和详尽的方法)。

于 2013-01-27T18:00:44.170 回答
3

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

EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
于 2013-01-27T17:34:48.177 回答