2012-10-05 5 views
1

특정 폴더의 모든 .zip을 다른 폴더로 이동하려고합니다. 소스 폴더는 현재 내가 모두 서버에 로그인 한 경우 작동 SQL xp_cmdshell 서버간에 파일 복사

EXECUTE xp_cmdshell 'copy \\server1\e$\ETL\*.zip \\server2\e$\ETL\' 
GO 

을 사용하고, 다른 서버에있는,하지만 목표는 SQL 서버 작업 에이전트를 통해이 프로세스를 자동화 할 수 있습니다. 시도했습니다.

EXECUTE sp_xp_cmdshell_proxy_account 'domain\useracc','pass' 
GO 
EXECUTE xp_cmdshell 'copy \\server1\e$\ETL\*.zip \\server2\e$\ETL\' 
GO 

그러나 다음과 같은 오류가 발생합니다.

오류

는 sp_xp_cmdshell_proxy_account 실행 중에 발생. 가능한 이유 : 제공된 계정이 유효하지 않거나 '## xp_cmdshell_proxy_account ##'자격 증명을 만들 수 없습니다. 오류 코드 : '0'.

또한 이것이 내 해결책인지 확실하지 않습니다. 이걸 어떻게 성취 할 수 있는지 제발 도와주세요. server1의 파일 이름은 매일 이름과 수량을 변경합니다.

답변

1

나는 다음 일이 나를 위해 일한다는 것을 알았다. 명령 프롬프트에 services.msc에서

  1. ,이 서버의 모든 서비스 목록을 열 것입니다.

  2. 서비스 목록에서 SQL Server 에이전트, 오른쪽 클릭 -> 속성을 ​​찾습니다. 두 서버 모두에 대한 액세스 권한이있는 사용자에게 탭

변경 로그온을 로그온로 이동합니다. 그런 다음 스크립트를 다시 작성하여 Server Agent CmdExec 작업 단계를 사용하십시오 (Pete Carter 감사합니다)

2

강력히 권할 것입니다 ... xp_cmdshell을 사용하지 마십시오. 그것은 당신의 표면 지역에 큰 보안 도매를 열어 공격에 취약하게 만듭니다. xp_cmdshell을 해제해야합니다!

서버 에이전트를 사용하여이를 자동화하려는 경우 두 가지 옵션이 있습니다. 필자가 선호하는 것은 파일 시스템 작업과 함께 간단한 SSIS 패키지를 작성하고이 패키지를 서버 에이전트로 예약하는 것입니다. SSIS는 이러한 종류의 작업에서는 충분히 활용되지 못하지만 실제로는 상당히 능숙합니다.

또는 Server Agent CmdExec 작업 단계를 사용하도록 스크립트를 다시 작성하십시오. xp_cmdshell을 사용할 필요가 없으며 공격 대상이 줄어 듭니다.

관련 문제