2013-10-21 4 views
1

내가 SQL Server 2008의 다음 문을 실행하면 :SQL 서버 xp_cmdshell을 오류 5

declare @s varchar(100) 
set @s='dir' 
exec sp_configure 'show advanced options',1 
reconfigure 
exec sp_configure 'xp_cmdshell',1 
reconfigure 
exec xp_cmdshell @s 

그것은 다음과 같은 오류 제공 :

execute xp_cmdshell error.invoke 'CreateProcess' failed,error code: '5'.

가 어떻게이 문제를 해결할 수 있습니까? 내가 xp_cmdshell 절차를 활성화하고 폴더에 읽기/쓰기 권한을 부여했습니다.

인터넷에서 검색 한 다음 도메인 사용자를 관리자 그룹에 추가하는 방법에 대해 알아 보았습니다. 그러나 나는 아직도 원리를 이해하지 못한다. 나는 어떤 통찰력도 감사 할 것이다. 감사!

답변

1

오류 코드 5는 액세스가 거부되었음을 의미합니다.

MSSQL 서비스에 사용 된 계정에 실행하려는 명령이 올바른지 확인하십시오.

세부 사항 : 희망이 다른 사람이 도움이 ... http://social.msdn.microsoft.com/Forums/sqlserver/en-US/bbdffb3c-6604-4011-ac5f-5ea8ecb1a32c/xpcmdshell-a-call-to-createprocess-failed-with-error-code-5-under-sql2005-rtm?forum=sqlsecurity

+0

나는 그 문서를 읽었으며 오류의 이유를 알고있다. 그러나 나는 그것을 운영하는 방법을 여전히 모른다. 나는 net을 사용한다. 사용자 그룹을 나열하는'cmd'의 'localgroup'을 사용합니다. 그리고 어떤 사용자가 관리자 그룹에 추가 할 지 모릅니다. 'net localgroup/add administrator username'을 사용합니다. – Dolphin

1

이 가능성이 많은 사람들에게 매우 쉽지만, 나는이 일을 시간의 엄청난 양의 ... 낭비하고 잡았다은 분명 아니었다.

(SQL2012에서 테스트)

1 단계 : 실제로 SQL Server의 xp_cmdshell을 기능을 사용

  USE master 
      Go 
      EXEC sp_configure 'show advanced options', 1 
      Go 
      RECONFIGURE 
      Go 
      EXEC sp_configure 'xp_cmdshell', 1 
      GO 
      RECONFIGURE 
      GO 
      EXEC sp_configure 'show advanced options', 0 
      Go 
      RECONFIGURE 
      Go 
2 단계

: 도스 실행 "WHOAMI/모든"명령을 사용하여 xp_cmdshell을 우리의 두 서비스 중지 명령

  EXEC xp_cmdshell 'whoami /all' 
      exec xp_cmdshell 'net stop MR2012ApplicationService'; 
      exec xp_cmdshell 'net stop MR2012ProcessService'; 

다른 비트들 중에서도 "nt authority \ network service S-1-5-20"이라고 표시됩니다. 표시된 계정에 다시 시작할 서비스에 대한 권한이 있어야합니다. 다른 두 명령은 모두 서비스로 인해 권한 실패 중지하려고 시도 :

  System error 5 has occurred. 
      Access is denied. 

3 단계 : 같이 Subinacl를 사용하여, 우리는 시작하기 전에의이 서비스에 대한 사용 권한을 살펴 보자. 이것이 내가 문제가되는 곳이기 때문에 SUBINACL.exe에 대한 전체 경로를 확실히 알 수 있도록하십시오.

  where SUBINACL 
      SUBINACL.exe /SERVICE MR2012ProcessService /DISPLAY 

당신이 내가 가진 동일한 문제가 있다면, 당신은 당신이 이전에 "Windows Server 2003 리소스 키트 도구"(이것은 내 개발 기계) 추출 및 버전 4.0 수도 어디든지 같이 Subinacl의 경로가 표시됩니다. 1.1604. 즉, "NT authority \ network service"에 권한이없는 것을 관찰하십시오. 알았다? 알았다!

4 단계 : 이러한 권한을 부여합시다!

  SUBINACL.exe /SERVICE MR2012ApplicationService /GRANT="nt authority\network service"=LQSTOP 
      SUBINACL.exe /SERVICE MR2012ProcessService /GRANT="nt authority\network service"=LQSTOP 

5 단계 :이 두 명령의 출력에주의하십시오! 그들이 많이했던 것처럼 보이지 않습니까?

  +SERVICE MR2012ApplicationService 
      /GRANT=nt authority\network service=LQSTOP 

      Elapsed Time: 00 00:00:00 
      Done:  0, Modified  0, Failed  0, Syntax errors  0 

흠. 우리가 시작하기 전에 우리가 권한을 바라 보았다 글쎄, 이제 그들은 지금 어떤 모습인지 살펴 보자 :

  SUBINACL.exe /SERVICE MR2012ProcessService /DISPLAY 

글쎄, 그 절름발이입니다. 그것은 작동하지 않았다!글쎄요, 밝혀 졌을 때, 저는 모든 종류의 미친 사업을 시도하는 데 엄청난 시간을 낭비했습니다. 문제의 근원은 SUBINACL의 알려진 버그입니다!

6 단계 : \ 데브 \ 도구 : 이제 최신 버전을 가서 C에 설치하겠습니다

  https://www.microsoft.com/en-us/download/details.aspx?id=23510 

을 한 후의 다시 EXE 파일의 경로/버전을 확인하자, 설치합니다.

  where SUBINACL 

음, 같은 버전이지만 현재 SUBINACL.exe.old가 있습니다.

7 단계 : 해당 허가 부여를 다시 시도해 봅시다! 출력 결과는 다음과 같습니다.

  MR2012ApplicationService : new ace for DOMAIN\MyProxyAccount 
      MR2012ApplicationService : 1 change(s) 

      Elapsed Time: 00 00:00:00 
      Done:  1, Modified  1, Failed  0, Syntax errors  0 
      Last Done : MR2012ApplicationService 

주름이 하나 더 있습니다. 실행 계정은 SQL Server의 서비스 계정 (즉, NT 권한 \ 네트워크 서비스)이됩니다. 그러나 이것이 바람직하지 않은 경우 프록시를 설정할 수 있습니다.

8 단계 : 프록시 계정을 설정은 다음과 같이 설정해야합니다 :

  EXEC sp_xp_cmdshell_proxy_account 'DOMAIN\MyProxyAccount', '[email protected]'; 

이 명확하게하기 위해이가 내, 그것이 어떻게 작동하는지 내 이해를 설정되지 않았습니다.

9 단계 : 물론,이 프록시 계정 권한을 가지고 있어야는 :

  C:\Dev\Tools\SUBINACL.exe /SERVICE MR2012ApplicationService /GRANT=DOMAIN\MyProxyAccount=LQSTOP 
      C:\Dev\Tools\SUBINACL.exe /SERVICE MR2012ProcessService /GRANT=DOMAIN\MyProxyAccount=LQSTOP 

또한, 서비스 계정은 로컬 정책에서 "일괄 작업으로 로그온"을해야합니다.

감사합니다,

스튜어트

0

다음과 같이 SQL Server 관리 Studio에서이 작업을 수행 할 수 있습니다

서버를 마우스 오른쪽 단추로 클릭하고 선택 패싯 선택 패싯 노출 영역 구성 설정 특성 XPCmdShellEnabled True로 다음 프록시 계정 만들기