启用“ xp _ cmdshell”SQLServer

我要执行 EXEC master..xp_cmdshell @bcpquery

但我得到了以下错误:

SQL Server 阻止对组件‘ xp _ cmdshell’的过程‘ sys.xp _ cmdshell’的访问,因为该组件作为该服务器的安全配置的一部分被关闭。系统管理员可以使用 sp _ configure 启用“ xp _ cmdshell”。有关启用“ xp _ cmdshell”的详细信息,请参阅 SQLServer 联机丛书中的“外围应用配置”。

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

怎么解决?

374268 次浏览

你也可以在重新配置之后再次隐藏高级选项:

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

如其他答案所示,诀窍(在 SQL2005或更高版本中)是按照这个顺序将 show advanced optionsxp_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

注意,这依赖于 SQLServer2005或更高版本(最初的问题是针对2008)。

虽然接受的答案将工作的大多数时候,我遇到了一些情况(仍然不知道为什么) ,这是没有。通过在 RECONFIGURE中使用 WITH OVERRIDE对查询进行轻微修改,就可以得到解决方案

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

预期产出为

配置选项“显示高级选项”从0改为1。运行 RECONFIGURE 语句进行安装。
配置选项‘ xp _ cmdshell’从0改为1。

右键单击 server —— > Facets —— > Surface Area Configuration —— > XPCmshellEnble —— > true enter image description here

对我来说,在 SQL 2008 R2上的唯一方法是:

EXEC sp_configure 'Show Advanced Options', 1
RECONFIGURE **WITH OVERRIDE**
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE **WITH OVERRIDE**

重要的是要知道启用 我们说的是 MSSQL xp _ cmdshell对安全性至关重要,如消息警告所示:

引用原文 SQL Server 阻止对组件‘ xp _ cmdshell’的过程‘ sys.xp _ cmdshell’的访问,因为该组件作为该服务器的 < strong > 安全配置 的一部分被关闭。[...]

启用服务是一种 软弱,例如在 web 应用程序中可以反映和执行来自攻击者的 SQL 命令。 流行的 CWE-89: SQL Injection可能是我们软件的弱点,因此这些类型的场景可能为可能的攻击铺平道路,如 CAPEC-108: Command Line Execution through SQL Injection