从 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 访问文件系统的一个很好的起点(但是,如果您四处搜索,您会发现更现代和详尽的方法)。