2016-07-11 4 views
1

몇 명의 동료 직원이 SSIS에서 암호로 보호 된 MS Access 2010 데이터베이스에 연결하는 데 문제가 있습니다. 나는 이것을 해결하기위한 시도를하기로 결정했다.SQL Server의 SSIS 패키지에서 암호로 보호 된 MS Access 2010 데이터베이스에 연결할 수 없습니다.

상황을 단순화하기 위해 암호 보호 기능이없는 하나의 테이블과 한 행으로 새로운 MS Access 2010 데이터베이스를 만들었습니다. 그 데이터베이스를 복사하고 소스를 차별화하고 암호를 적용 할 수 있도록 한 행의 데이터를 업데이트했습니다. 전체 UNC 경로를 사용하고있는 동일한 네트워크 경로의 두 데이터베이스

각 데이터베이스마다 하나씩 두 개의 SSIS 패키지를 만들었습니다. 모든 패키지는 하나의 테이블에서 읽고 CSV에 데이터를 씁니다. Access 데이터베이스에 연결하려면 Microsoft Office 12.0 Access 데이터베이스 엔진 OLE DB 공급자을 사용하고 있습니다. 암호로 보호 된 데이터베이스 연결의 경우 암호 Jet OLEDB : Database Password 필드에 암호를 넣습니다.

Visual Studio를 통해 내 컴퓨터에서 실행중인 경우 SSIS 패키지는 모두 예상대로 작동하고 Access 데이터베이스 테이블의 데이터를 데이터베이스와 동일한 위치에있는 CSV 파일에 기록합니다. 그러나 패키지를 업로드하고 각각에 대해 SQL 작업을 만들 때 암호가없는 것은 작동하지만 암호가없는 것은 작동하지 않습니다. 여기

입니다 (사용자가 밖으로 고정 된로) 내가 오류 ...

Executed as user: XXXXXX\XXXXXXXX. Microsoft (R) SQL Server Execute Package Utility Version 10.50.4000.0 for 32-bit Copyright (C) Microsoft Corporation 2010. All rights reserved.  
Started: 1:42:02 PM 

Error: 2016-07-11 13:42:03.94  
Code: 0xC0202009  
Source: Package1 Connection manager "TestPassword"  
Description: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. 

Error code: 0x80004005. An OLE DB record is available. 
Source: "Microsoft Office Access Database Engine" 
Hresult: 0x80004005 
Description: "Cannot open database ''. It may not be a database that your application recognizes, or the file may be corrupt.". End Error 

Error: 2016-07-11 13:42:03.94  
Code: 0xC020801C  
Source: Data Flow Task OLE DB Source [1]  
Description: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. The AcquireConnection method call to the connection manager "TestPassword" failed with error code 0xC0202009. There may be error messages posted before this with more information on why the AcquireConnection method call failed. End Error 

Error: 2016-07-11 13:42:03.95  
Code: 0xC0047017  
Source: Data Flow Task SSIS.Pipeline  
Description: component "OLE DB Source" (1) failed validation and returned error code 0xC020801C. End Error 

Error: 2016-07-11 13:42:03.95  
Code: 0xC004700C  
Source: Data Flow Task SSIS.Pipeline  
Description: One or more component failed validation. End Error 

Error: 2016-07-11 13:42:03.95  
Code: 0xC0024107  
Source: Data Flow Task  
Description: There were errors during task validation. End Error 

DTExec: The package execution returned DTSER_FAILURE (1). 

Started: 1:42:02 PM Finished: 1:42:03 PM Elapsed: 1.903 seconds. The package execution failed. The step failed. 

어떤 제안이?

+0

우리는 문제가 서버가 오래된 드라이버를 믿습니다. 그게 문제로 밝혀지면 나는 의견을 게시 할 것이다. – nscheaffer

답변

2

원격 Azure DB에 연결을 시도하는 ADO Net 연결 관리자와 비슷한 문제가있었습니다.

연결 관리자에 자격 증명을 포함한 전체 연결 문자열을 식과 변수를 통해 할당 할 수 있습니다. 런타임에이 정보를 할당하는 더 안전한 방법이 있지만 빠른 방법입니다.

이러한 유형의 배포가 실패하는 주된 이유 중 하나는 연결 관리자를 설정할 때 암호가 사용자의 컴퓨터에만 암호화된다는 것입니다. 패키지가 프로덕션 시스템으로 이동되면 연결 관리자에 저장된 암호를 해독 할 수 없습니다. 따라서 패키지는 보호 된 DB에 액세스 할 수 없습니다.

0
  1. 는 패키지 보안은 당신이 당신의 패키지는 당신이 당신의 연결에 대한 사용자 이름과 암호 (또는 전체 연결 문자열을) 다시 입력했는지 확인 배포 할 때
  2. 을 EncryptSensitiveWithPassword을 설정했습니다.
+0

패키지를 암호화 할 때 암호는 어디에 입력해야합니까? PackagePassword 패키지 속성에 뭔가를 넣을 때마다 사라지는 것처럼 보입니다. – nscheaffer

+0

PackagePassword 속성 페이지에서 오른쪽의 "..."버튼을 클릭하십시오. 그런 다음 암호를 입력하고 다시 입력하라는 대화 상자가 나타납니다. 당신은 정확합니다 - 그것은 매우 직관적이지 않습니다! – BIDeveloper

+0

내가 할 때 나는 여전히 빈 속성 값으로 끝납니다. 그것은 "********"또는 이와 비슷한 것이어야합니다.그리고 SQL Server에서 암호를 어떻게 지정해야합니까? – nscheaffer