启用“xp_cmdshell”SQL Server

我想执行EXEC master..xp_cmdshell @bcpquery

但我得到一个错误:

SQL Server阻止了对组件“xp_cmdshell”的过程“sys.xp_cmdshell”的访问,因为此组件作为此服务器的安全configuration的一部分被closures。 系统pipe理员可以使用sp_configure启用“xp_cmdshell”。 有关启用“xp_cmdshell”的更多信息,请参阅SQL Server联机丛书中的“表面区域configuration”。

有什么办法可以激活这个function,或者在启用这个function之前执行一些东西?

如何解决?

你需要启用它。 查看xp_cmdshell MSDN文档的权限部分:

http://msdn.microsoft.com/en-us/library/ms190693.aspx

 -- 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 

重新configuration后,您还可以再次隐藏高级选项:

 -- show advanced options EXEC sp_configure 'show advanced options', 1 GO RECONFIGURE GO -- enable xp_cmdshell EXEC sp_configure 'xp_cmdshell', 1 GO RECONFIGURE GO -- hide advanced options EXEC sp_configure 'show advanced options', 0 GO RECONFIGURE GO 

如其他答案中所列,技巧(在SQL 2005或更高版本中)是将show advanced options的全局configuration设置和xp_cmdshell更改为1

除此之外,如果你想保留以前的值,你可以先从sys.configurations读取它们,然后以相反的顺序应用它们。 我们也可以避免不必要的reconfigure呼叫:

 declare @prevAdvancedOptions int declare @prevXpCmdshell int select @prevAdvancedOptions = cast(value_in_use as int) from sys.configurations where name = 'show advanced options' select @prevXpCmdshell = cast(value_in_use as int) from sys.configurations where name = 'xp_cmdshell' if (@prevAdvancedOptions = 0) begin exec sp_configure 'show advanced options', 1 reconfigure end if (@prevXpCmdshell = 0) begin exec sp_configure 'xp_cmdshell', 1 reconfigure end /* do work */ if (@prevXpCmdshell = 0) begin exec sp_configure 'xp_cmdshell', 0 reconfigure end if (@prevAdvancedOptions = 0) begin exec sp_configure 'show advanced options', 0 reconfigure end 

请注意,这依赖于SQL Server版本2005或更高版本(原始问题是2008年)。

右键单击服务器 – > Facets – >表面区域configuration – > XPCmshellEnbled – > true 在这里输入图像描述

尽pipe接受的答案在大多数时候都有效,但是我遇到了(仍然不知道为什么)的情况。 通过使用RECONFIGUREWITH OVERRIDE对查询进行轻微的修改就可以得到解决scheme

 Use Master GO EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE WITH OVERRIDE GO EXEC master.dbo.sp_configure 'xp_cmdshell', 1 RECONFIGURE WITH OVERRIDE GO 

预期的产出是

configuration选项“显示高级选项”从0更改为1.运行RECONFIGURE语句进行安装。
configuration选项“xp_cmdshell”从0更改为1.运行RECONFIGURE语句进行安装。

你可以使用SQLcmd。 你已经运行下面的命令。 在这里输入图像描述