启用“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接受的答案在大多数时候都有效,但是我遇到了(仍然不知道为什么)的情况。 通过使用RECONFIGURE
的WITH 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。 你已经运行下面的命令。