나는 실행하고 싶다 EXEC master..xp_cmdshell @bcpquery
그러나 다음과 같은 오류가 발생합니다.
SQL Server는이 서버에 대한 보안 구성의 일부로이 구성 요소가 해제되어 있으므로 ‘xp_cmdshell’구성 요소의 ‘sys.xp_cmdshell’프로 시저에 대한 액세스를 차단했습니다. 시스템 관리자는 sp_configure를 사용하여 ‘xp_cmdshell’을 사용할 수 있습니다. ‘xp_cmdshell’활성화에 대한 자세한 내용은 SQL Server 온라인 설명서의 “표면 영역 구성”을 참조하십시오.
이 기능을 활성화하거나 기능을 활성화하기 전에 무언가를 실행하는 방법이 있습니까?
그것을 해결하는 방법?
답변
활성화해야합니다. 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
답변
재구성 후 고급 옵션을 다시 숨길 수도 있습니다.
-- 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
및 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).
답변
수락 된 답변이 대부분 효과가 있지만, 그렇지 않은 경우가 있습니다 (아직도 이유를 모릅니다). WITH OVERRIDE
in 을 사용하여 쿼리를 약간 수정 RECONFIGURE
하면 솔루션이 제공됩니다.
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
예상 출력은
‘show advanced options’구성 옵션이 0에서 1로 변경되었습니다. RECONFIGURE 문을 실행하여 설치하십시오.
구성 옵션 ‘xp_cmdshell’이 0에서 1로 변경되었습니다. RECONFIGURE 문을 실행하여 설치하십시오.
답변
이 질문이 해결 되더라도 개발자로서 무시한 이후로 ….에 대한 조언을 추가하고 싶습니다 .
메시지 경고에 표시된대로 MSSQL xp_cmdshell enabled 에 대해 이야기하는 것이 보안에 중요하다는 것을 알고 있어야합니다 .
Blockquote SQL Server 는이 서버에 대한 보안 구성 의 일부로이 구성 요소가 해제되어 있으므로 ‘xp_cmdshell’구성 요소의 ‘sys.xp_cmdshell’프로 시저에 대한 액세스를 차단했습니다 . […]
서비스를 활성화 상태로 유지하는 것은 일종의 약점 입니다. 예를 들어 웹 응용 프로그램에서 공격자의 SQL 명령을 반영하고 실행할 수 있습니다. 널리 사용되는 CWE-89 : SQL Injection
소프트웨어의 약점 일 수 있으므로 이러한 유형의 시나리오는 CAPEC-108 과 같은 가능한 공격을 유발할 수 있습니다 .Command Line Execution through SQL Injection
우리는 즐거운 일을하기를 희망합니다. 개발자와 엔지니어는 인식을 가지고 일을하고 더 안전해질 것입니다!
답변
저에게 SQL 2008 R2의 유일한 방법은 다음과 같습니다.
EXEC sp_configure 'Show Advanced Options', 1
RECONFIGURE **WITH OVERRIDE**
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE **WITH OVERRIDE**