2013-03-13 4 views
0

이제 모든 프로덕션 데이터베이스를 SQL Server 2005 32 비트 인스턴스에서 새로운 SQL Server 2012 64 비트 인스턴스로 이동했습니다.Access 드라이버를 사용하여 SQL Server X64에서 텍스트 및 Excel로 연결된 서버 만들기

우리 개발자들이 아직도 겪고있는 어려움 중 하나는 링크 된 서버입니다.

우리는 텍스트, CSV 또는 Excel 파일에서 데이터를 가져와야하는 많은 프로그램을 보유하고 있으며 링크 된 서버와 텍스트 파일로 구현되는 방식으로 텍스트 파일에 select 문을 쉽게 보낼 수 있습니다. 그것을 테이블에 삽입하십시오.

문제는 32 비트 서버가 모든 사람에게 완전한 사용 권한을 가진 전단계 디렉터리에있는 파일 인 Microsoft.Jet.OLEDB.4.0 드라이버를 사용하고 보안 문제가 발생하지 않았다고 제기했습니다. 새로운 64 비트 서버에서

우리는 다음과 같은 구문을 사용하여 연결된 서버를 추가 :

USE [master] 
GO 
EXEC master.dbo.sp_addlinkedserver 
    @server = N'TEMP_FILES_1' 
    , @srvproduct=N'' 
    , @provider=N'Microsoft.ACE.OLEDB.12.0' 
    , @datasrc=N'\\SERVER-APP01\BWA\TempFiles' 
    , @provstr=N'Text' 

참고 :

  • 데이터 소스가 네트워크 공유에 있습니다.
  • MSSQL 서비스는 도메인 관리자 계정으로 실행됩니다.
  • 도메인 관리자로 원격 로그인되어 있습니다. 물론 로컬 관리자이기도합니다.
  • \\SERVER-APP01\BWA\TempFiles 디렉토리에는 모든 사용자에 대해 전체 액세스 권한이 있습니다. 내가 EXEC sp_testlinkedserver [TEMP_FILES_1]을 실행할 때

지금 나는 다음과 같은 오류 메시지가 :

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "TEMP_FILES_1" returned message "'\\SERVER-APP01\BWA\TempFiles' is not a valid path. Make sure that the path name is spelled correctly and that you are connected to the server on which the file resides.". 

이 확실히 보안 문제이지만, 재미있는 부분은 내가 xp_cmdshell 'dir \\SERVER-APP01\BWA\TempFiles'를 실행할 때 그렇게 분명히 서비스가 레코드를 반환한다는 것입니다 이 폴더에 대한 액세스 ...

내 로컬 컴퓨터의 반대편에는 또한 연결된 서버가 동일한 64 비트 인스턴스가 있으며 매력처럼 작동합니다!

나는 내 문제에 대한 해결책을 찾기 위해 인터넷을 기어 다녔지 만 텍스트 파일에 연결된 서버는 특히 64 비트에서 거의 사용되지 않는 것 같습니다.

EXEC xp_cmdshell 'net use y: \\[source directory path] [pw] /USER:[active user]' 
EXEC xp_cmdshell 'copy y:\[source file] [destination directory]' 
EXEC xp_cmdshell 'net use y: /delete' 
+0

'MSSQL 서비스가 실행 account.' 도메인 관리자로 O_O –

+0

@JonSeigel : –

답변

0

우리는 우리가 다음과 같이 데이터를 읽을 수 전에 대상 SQL Server 시스템의 드라이브에 파일을 복사했다 사실, 도메인 관리 된 네트워크 계정으로 변경해야하지만 아직하지 않았습니다 ...