안녕하세요
xp_cmdshell 을 이용해서 bcp 로 파일출력을 하려고 하는데 네트워크상의 파일서버로 출력시 억세스 거부라고 뜹니다.
프로시저를 사용해서 하루에 한번 돌리는건데 로컬에서는 아무 문제없는데 네크워크상 출력을 할려면 억세스 거부가 뜨네요
고수님들의 조언을 부탁합니다.
먼저 NT서비스가 돌아가는 환경을 이해할 필요가 있습니다.
sql 서버가 로컬서비스로 돌아갈때는 로컬시스템 이라는 로컬에서 모든 권한을 가지고 있게 동작을 합니다. 그래서 xp_cmdshell은 sql서버가 실행시키는것이기 때문에 로컬에서는 당연히 bcp가 됩니다.
단 이게 네트웍으로 나갔을때는 문제가 발생합니다. 로컬시스템이라는 권한은 로컬에서만 통하기 때문에 원격 컴퓨터에는 아무 권한이 없습니다.
이 권한문제를 해결하기 위해서는 NT서비스(관리도구/서비스에서 확인가능) 를 열어서 Mssql server 시작계정을 도메인계정(Active Directory)으로 설정을 해주세요. 단 이 도메인 계정은 로컬과 원격컴퓨터에서 모든권한을 가지게 설정을 해주시고요.(원래는 원격컴퓨터에서는 쓰기만 가능하도록 해야 하지만 처음 테스트하기 위해 모든권한 설정 권장)
그러나 AD계정을 설정한다는 것은 추가적으로 관리포인트가 하나 더 늘어난다는 점 잊지 마시구요.
만약 AD도메인을 운용하지 않는 환경이라면 꽁수가 있습니다.
로컬컴퓨터와 원격컴퓨터에서 동일한 ID/password의 계정을 만드시고 adminstrators 그룹에 넣어주세요. 그리고 로컬컴퓨터에서 mssql서버의 시작계정을 지금 만든 계정으로 지정해주세요.. 그리고 sql server 재시작하고 xp_cmdshell을 실행하시면 잘 될것입니다.
지금까지 설명을 드렸지만 xp_cmdshell을 직접 실행시키는것은 보안상에 위험이 발생할수 있습니다. 그래서 bcp를 할수 있는 다른방법을 마련해 보는것이 좋을듯싶네요..
도움이 됐으면 좋겠네요.. ^^