none
안녕하세요 외부프로그램에서 DB로 Bulk Insert의 네트워크 드라이브 연결 사용에 대해서 여쭙고 싶습니다. RRS feed

  • 질문

  • 안녕하세요

    Bulk Insert 에 관해서 질문 좀 드리겠습니다.

      SET @sql = 'BULK INSERT ' + @strTableName;
      SET @sql = @sql + ' from '+char(39)+@strFilename+char(39);
      SET @sql = @sql + ' with(FIELDTERMINATOR = '+char(39)+','+char(39)+', ROWTERMINATOR = '+char(39)+'\n'+char(39)+',tablock)'
     
      execute sp_executesql @sql

    일단 프로시저 내부에서는 이런식으로 동작하고 있습니다.

    BULK INSERT TABLE from //192.168.0.128\bcp\bulk.txt with(FIELDTERMINATOR = ',', ROWTERMINATOR = '\n',tablock)

    쿼리로 나열하면.. 이런식이 됩니다.

    쿼리를 직접 mssql에서 실행하면 bulk가 잘 실행되고 있습니다

    다만 외부에서 프로그램(mfc로 짜고 연결은 ado를 사용, 구성은 프로그램 PC, DB 서버가 별도로 존재)으로 호출하면 다음과 같은 에러가 발생합니다

    파일 //192.168.0.128\bcp\bulk.txt를(을) 열 수 없으므로 대량 로드할 수 없습니다. 운영 체제 오류 코드 5(액세스가 거부되었습니다.)입니다.

    분명 네트워크 공유 드라이브도 추가도 잘되고... sql 자체에서 쿼리 입력시 잘 실행되는데.. 외부에서 실행하면 무슨 문제인지 에러를 뿜습니다

    도음 부탁드립니다. (_ _)

    ip주소는 프로그램이 동작하는 pc의 ip주소이고 DB서버에 네트워크 드라이브 추가 및 자격 증명까지 모두 해놨습니다.

    슬래시는 역슬래시로 쓸 경우 링크로 판단해서 뒤집었습니다..
    2014년 11월 19일 수요일 오전 9:14

답변

  • 안녕하세요.

    해당 문제는 권한 이슈로 생각되며, 아래 내용으로 테스트해보실 것을 권고드립니다.

    문제는 쿼리를 실행하는 세션에서 //192.168.0.128\bcp에 접근할 수 있는 권한이 없기 때문입니다.

    BULK INSERT 전에 네트워크 경로를 연결하기 위한 명령을 실행하고 BULK INSERT가 잘 되는지 확인해보면 도움이 될 듯 싶습니다.

    exec xp_cmdshell 'net use \\gun26\sqlbackup 암호 /user:원격사용자계정'

    예를 들어 원격사용자계정이 testuser이고, 암호가 Pa$$w0rd라면

    exec xp_cmdshell 'net use \\gun26\sqlbackup Pa$$w0rd /user:testuser'

    xp_cmdshell을 사용하는 부분하고 원격사용자 계정의 암호가 노출되는 이슈가 있기는 하지만,

    권한 문제를 해결하기 위해서 테스트 해볼 필요는 있다고 보입니다.

    참고로 xp_cmdshell... 부분을 암호화해서 프로시저로 만들고 호출하는 것도 한가지 방법이 되겠습니다.

    Younggun Kim

    MCDBA, MCITP
    Consultant @ Database Division in SQLRoad
    http://www.sqlroad.com  http://www.sqlserver.co.kr
    ygkim@sqlroad.com



    2014년 11월 20일 목요일 오후 1:44

모든 응답

  • 권한 이슈일 것 같습니다. 아래 참고 자료 확인 부탁드립니다.

    [MS-SQL] 운영체제 오류 5(엑세스가 거부되었습니다.) 문제 해결 책

    제시해 드린 답변이 도움이 되었기를 바랍니다.
       
    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.
    하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다

    2014년 11월 20일 목요일 오전 2:22
    중재자
  • 안녕하세요.

    해당 문제는 권한 이슈로 생각되며, 아래 내용으로 테스트해보실 것을 권고드립니다.

    문제는 쿼리를 실행하는 세션에서 //192.168.0.128\bcp에 접근할 수 있는 권한이 없기 때문입니다.

    BULK INSERT 전에 네트워크 경로를 연결하기 위한 명령을 실행하고 BULK INSERT가 잘 되는지 확인해보면 도움이 될 듯 싶습니다.

    exec xp_cmdshell 'net use \\gun26\sqlbackup 암호 /user:원격사용자계정'

    예를 들어 원격사용자계정이 testuser이고, 암호가 Pa$$w0rd라면

    exec xp_cmdshell 'net use \\gun26\sqlbackup Pa$$w0rd /user:testuser'

    xp_cmdshell을 사용하는 부분하고 원격사용자 계정의 암호가 노출되는 이슈가 있기는 하지만,

    권한 문제를 해결하기 위해서 테스트 해볼 필요는 있다고 보입니다.

    참고로 xp_cmdshell... 부분을 암호화해서 프로시저로 만들고 호출하는 것도 한가지 방법이 되겠습니다.

    Younggun Kim

    MCDBA, MCITP
    Consultant @ Database Division in SQLRoad
    http://www.sqlroad.com  http://www.sqlserver.co.kr
    ygkim@sqlroad.com



    2014년 11월 20일 목요일 오후 1:44