programing

Windows Authentication 사용자로서 "OLE DB 공급자의 인스턴스를 만들 수 없습니다.

stoneblock 2023. 7. 8. 10:31

Windows Authentication 사용자로서 "OLE DB 공급자의 인스턴스를 만들 수 없습니다.

Oracle 서버에서 MS SQL Server의 openrowset을 실행하려고 합니다.

다음 명령을 실행할 때:

select * from
OPENROWSET('OraOLEDB.Oracle','srv';'user';'pass', 
'select * from table')

다음 오류가 발생합니다.

Msg 7302, Level 16, State 1, Line 1
Cannot create an instance of OLE DB provider "OraOLEDB.Oracle" for linked server "(null)".

오픈 행셋을 사용하는 방법을 알려주실 수 있나요?OraOLEDB.Oracle?

저는 64비트 버전의 MS SQL Server와 Oracle OLEDB 드라이버를 사용하고 있습니다.

편집

Windows 7 x64Windows Server 2008 x64와 MS SQL Server 2008 x64를 실행하는 두 대의 컴퓨터에서 이 작업을 수행했습니다.둘 다 동일한 오류 메시지를 표시했습니다.

Manager에서 Server Enterprise Manager를 .\Server Objects\Linked Servers\Providers오쪽클에서 마우스 합니다.OraOLEDB.Oracle한 후 "정보", "정보"를 하십시오."Allow inprocess"를 다시 만들고합니다.연결된 서버를 다시 만들고 다시 테스트합니다.

SQL Server Management Studio에 액세스할 수 없는 경우 다음 쿼리를 실행할 수도 있습니다.

EXEC master.dbo.sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1

연결된 서버가 서버의 로컬 관리자인 사용자에게는 작동하지만 다른 사용자에게는 작동하지 않는 이 문제가 발생했습니다.여러 시간 동안 빈둥빈둥 놀다가 다음 단계를 사용하여 문제를 해결했습니다.

  1. 실행(CTRL + R) "dcomcnfg"."구성요소 서비스 -> 컴퓨터 -> 내 컴퓨터 -> DCOM 구성"으로 이동합니다.
  2. "MSDAINITIALIZE"의 속성 페이지를 엽니다.
  3. 등록 정보 페이지에서 "애플리케이션 ID"를 복사합니다.
  4. dcomcnfg에서 닫습니다.
  5. regedit을 실행합니다."HKEY_CLASSES_ROOT\AppID{?"로 이동합니다.?와 함께??????3단계에서 복사한 응용프로그램 ID를 나타냅니다.
  6. 마우스 오른쪽 단추를 클릭합니다.폴더를 열고 "권한"을 선택합니다.
  7. 로컬 관리자 그룹을 사용 권한에 추가하고 전체 제어 권한을 부여합니다.
  8. regedit에서 닫습니다.
  9. 서버를 재부팅합니다.
  10. "dcomconfig"를 실행합니다."구성요소 서비스 -> 컴퓨터 -> 내 컴퓨터 -> DCOM 구성"으로 이동합니다.
  11. "MSDAINITIALIZE"의 속성 페이지를 엽니다.
  12. "보안" 탭의 "시작 및 활성화 권한"에서 "사용자 정의"를 선택한 후 "편집" 단추를 누릅니다.
  13. 인증된 사용자를 추가하고 4개의 시작 및 활성화 권한을 모두 부여합니다.
  14. dcomcnfg에서 닫습니다.
  15. Oracle 설치 루트 디렉토리를 찾습니다.내 경우에는 "E:\Oracle".
  16. 오라클 루트 디렉터리의 보안 속성을 편집합니다.인증된 사용자를 추가하고 "읽기 및 실행", "폴더 내용 나열" 및 "읽기" 권한을 부여합니다.새 권한을 적용합니다.
  17. [고급 권한] 단추를 누른 후 [권한 변경]을 누릅니다.모든 하위 개체 권한을 이 개체의 상속 가능한 권한으로 바꾸기를 선택합니다.새 권한을 적용합니다.
  18. "Ora OLEDB"를 찾습니다.SQL Server의 Oracle" 공급자입니다."Allow Inprocess" 매개 변수가 선택되어 있는지 확인합니다.
  19. 서버를 재부팅합니다.

로컬 SQL Server 계정이 아닌 윈도우즈 인증을 사용하여 SQL Server에 연결하면 연결된 서버를 사용하려고 하면 다음 오류 메시지가 표시될 수 있습니다.

Cannot create an instance of OLE DB provider "(OLEDB provider name)"...

Microsoft KB 2647989는 "MSDAINITIALIZE DCOM 클래스의 보안 설정이 잘못되었습니다."라고 말합니다.

해결책은 MSDAINITALIZE의 보안 설정을 수정하는 것입니다.Windows Vista 이상에서 클래스는 신뢰할 수 있는 사용자가 소유합니다.보안을 조정하려면 먼저 MSDAINITALIZE의 소유권을 변경해야 합니다.위의 KB에는 자세한 지침이 나와 있습니다.

이 MSDN 블로그 게시물은 다음과 같은 이유를 설명합니다.

MSDainITALIZE는 OLE DB에서 제공하는 COM 클래스입니다.이 클래스는 OLE DB 연결 문자열을 구문 분석하고 연결 문자열의 속성 값을 기준으로 공급자를 로드/초기화할 수 있습니다. MSDAINITIAZE는 SQL Server에 연결된 사용자에 의해 시작됩니다.윈도우즈 인증을 사용하여 SQL 서버에 연결하는 경우 공급자는 로그인한 사용자 계정으로 초기화됩니다.로그인한 사용자가 SQL 로그인인 경우 공급자는 SQL Server 서비스 계정에서 초기화됩니다.사용된 로그인 유형에 따라 MSDANITALIZE에 대한 권한을 적절히 제공해야 합니다.

이 문제는 적어도 SQL Server 2000으로 거슬러 올라갑니다. Microsoft의 KB 280106은 오류를 설명하고("메시지 3" 참조) OLEDB 공급자에 대해 In Process 플래그를 설정하는 방법을 제안합니다.

In Process를 설정하면 당면한 문제를 해결할 수 있지만 원하는 문제가 아닐 수 있습니다.마이크로소프트에 따르면,

공급자를 SQL 서버 프로세스 외부에서 인스턴스화하면 공급자의 오류로부터 SQL 서버 프로세스를 보호할 수 있습니다.공급자가 SQL Server 프로세스 외부에서 인스턴스화되면 긴 열(텍스트, ntext 또는 이미지)을 참조하는 업데이트 또는 삽입이 허용되지 않습니다. -- SQL Server 2008 R2용 Linked Server Properties 문서

더 나은 대답은 Microsoft 지침에 따라 MSDainITALIZE 보안을 조정하는 것입니다.

특히 오류 7302의 경우 OraOLEDB를 찾을 때 레지스트리에서 발견했습니다.InprocServer32 위치가 잘못되었다는 Oracle.

그런 경우 또는 레지스트리에서 해당 문자열을 찾을 수 없는 경우 구성 요소를 설치하거나 다시 등록해야 합니다.

GUID 수준에서 키를 삭제한 다음 Prog를 찾아야 했습니다.ID(OraOLEDB).Oracle) 키를 누르고, 그것도 삭제합니다.(더 프로그램)ID는 쌍으로 CLSID에 연결됩니다.

그리고 오라OLEDB를 재등록했습니다.ORAOLEDB*.dll의 regsvr32.exe를 호출하여 Oracle.

재등록만 해도 문제가 해결되지 않았고, 정확한 위치를 알려주기 위해 레지스트리 키를 삭제해야 했습니다.또는 InprocServer32 위치를 해킹합니다.

이제 싱글 스레드 아파트에 대한 오류 7308이 발생했습니다. 계속 진행 중입니다!

Oracle 12c에 연결하려고 시도하는 SQL Server 2017에서 동일한 오류가 발생했습니다.오라클의 SQL Developer를 사용하여 소스 데이터베이스에 연결할 수 있었지만 링크된 서버에서 7302 오류가 계속 발생했습니다.

결국 모든 SQL 서비스를 중지하고 ODAC 구성 요소를 다시 설치했습니다.SQL 서비스 백업 및 voila를 시작했습니다!

아래와 같이 OraOLEDB.oracle 공급자의 속성에서 "프로세스 중 허용" 옵션을 활성화하십시오.

  • [열린 서버 객체 > 연결된 서버 > 공급자] 1 [오른쪽 클릭:
  • oraOLEDB.oracle > properties ] 2를 선택한 다음 "Allow in" 옵션을 선택합니다.
  • 프로세스"를 클릭하고 확인을 클릭합니다.

다른 훌륭한 응답 외에도 Oracle 설치 폴더에 NTFS 권한을 부여해야 했습니다.(읽기 액세스 권한을 부여했습니다.

다음 구성과 유사한 상황:

  • Windows Server 2012 R2 표준
  • MS SQL 서버 2008(SQL 2012도 테스트됨)
  • Oracle 10g 클라이언트(Oracle DB v8.1.7)
  • MSDAORA 공급자
  • 오류 ID: 7302

내 솔루션:

  • 32비트 MS SQL Server 설치(64비트 MSDAORA가 없음)
  • 32비트 Oracle 10g 10.2.0.5 패치 설치(setup.exe에서 W7 호환성 설정)
  • SQL 서비스 다시 시작
  • MSDAORA 공급자에서 프로세스허용을 선택합니다.
  • 연결된 오라클 서버 연결 테스트

언급URL : https://stackoverflow.com/questions/14499977/cannot-create-an-instance-of-ole-db-provider-error-as-windows-authentication-u