programing

시스템과 연결하는 방법.Data.OracleClient에서 Windows 인증으로 Oracle db로 이동하시겠습니까?

newstyles 2023. 9. 26. 22:04

시스템과 연결하는 방법.Data.OracleClient에서 Windows 인증으로 Oracle db로 이동하시겠습니까?

Oracle SQL Developer를 사용하면 Username에 /-character를 넣고 암호를 비워두면 연결됩니다.데이터베이스에 OP$MYWINDOWSUSERNAME 사용자가 생성되었습니다.

편집: OS Authentication(OS 인증) 확인란을 선택하면 SQL 개발자가 작동하지 않습니다(사용자 이름 + pwd를 비워두고 비활성화).또한 기본 설정->데이터베이스->고급화->Oracle Client 사용이 선택 취소되어 SQL Developer가 내 시스템과 거의 관련이 없다고 생각합니다.데이터.오라클 클라이언트.Oracle 연결 문제입니다.

그러나 다음과 같은 연결 문자열을 구성하려고 할 때:

string.Format("Data Source={0}; user id=/;password=;Integrated Security=yes", dbName);

ORA-01017 수신: 잘못된 사용자 이름/비밀번호: 로그온 거부

와 함께

string.Format("Data Source={0}; user id=/;password=;Integrated Security=no", dbName);

ORA-01005를 받았습니다.

와 함께

string.Format("Data Source={0};Integrated Security=yes", dbName);

ORA-01017 수신: 잘못된 사용자 이름/비밀번호: 로그온 거부

와 함께

string.Format("Data Source={0}; user id=/;", dbName);

ORA-01005를 받았습니다.

와 함께

string.Format("Data Source={0};User Id=/;Integrated Security=yes;", dbName);

ORA-01017을 받습니다.

내 프로그램의 Oracle Connection과 Oracle SQL Developer 둘 다 내가 Username과 Password를 지정하면 작동합니다.

편집: 이 작업은 다음과 같이 작동합니다.

string.Format("Data Source={0};Integrated Security=yes", dbName);

sqlnet.또는 행일 때

SQLNET.AUTHENTICATION_SERVICES= (NTS) 

로 변경됩니다.

SQLNET.AUTHENTICATION_SERVICES= (NONE)

누가 무슨 일이 일어나고 왜 일어나고 있는지에 대한 짧은 답변을 쓴다면, 저는 그에게 현상금을 수여할 수 있습니다.

연결 문자열이 아니라 Active Directory 구조와 AD의 LDAP DB를 사용하는 기능에 대한 Oracle 설정에서 문제가 발생했습니다. Active Directory를 사용하지 않고 로컬 DB(예: OracleXE)에서 코드를 시도하면 성공할 수 있지만 동시에 분산 Oracle 서버에서 인증 오류가 발생할 수 있습니다.AD와 Oracle을 제대로 설정할 수 있는 강력한 관리자를 찾으시기 바랍니다.

SQL 개발자는 때때로 이해할 수 없는 동작을 합니다.이 "OS 인증" 기능에 대해서는 신뢰할 수 없습니다.

제거해야 합니다.id인증 문자열에서 완전히 다음을 수행합니다.

string.Format("Data Source={0}; Integrated Security=yes;", dbName);

편집

NTS 옵션을 제거할 때만 작동한다는 사실은 예상되는 서비스가 실행되지 않거나, NTS가 모든 사용자에 대한 OS 인증을 지원하지 않지만 에 대해서만 지원할 수 있다는 것을 의미할 수 있습니다. 여기에서 몇 가지 설명을 찾을 수 있습니다.

NTS 서비스는 윈도우 환경에서 o/s 레벨 인증을 기반으로 Sys 사용자 인증을 만드는 데 사용됩니다.따라서 매번 Sys 사용자의 비밀번호를 제공하지 않을 경우 이를 설정해야 합니다.

그리고 여기서 당신이 시도할 수 있는 것을 사용하는 사람이 있습니다.sqlnet.ora:

SQLNET.AUTHENTICATION_SERVICES =(NONE, NTS)

또한 Oracle 버전에 따라 다를 수 있습니다. 여기서는 NTS가 Oracle 12c에서 지원되지 않는다고 표시합니다.

Oracle Database 12c Release 1(12.1)부터 NTS 인증 어댑터는 윈도우즈 도메인 사용자를 인증하는 NTLM 사용을 더 이상 지원하지 않습니다.따라서 NTS는 이전 Windows NT 도메인이나 이전 Windows NT 도메인 컨트롤러가 있는 도메인의 사용자를 인증하는 데 사용할 수 없습니다.그러나 Windows Local User(윈도우 로컬 사용자)로 실행되는 로컬 연결 및 Oracle Database 서비스는 NTLM을 사용하여 계속 인증됩니다.

한마디로 NTS가 표시한 윈도 네이티브 운영체제 인증입니다.

NTS가 지정되면 Oracle 클라이언트가 사용자 이름을 OP$MYWINDOWSUSERNAME 데이터베이스 사용자와 일치하지 않는 작업 그룹\username 또는 도메인\username으로 식별합니다.

NTS 옵션과 함께 작동하려면 db 사용자 이름에 도메인/워크그룹 이름을 포함해야 합니다.

CREATE USER "OPS$<DOMAIN_NAME>\<OS_USERNAME>" IDENTIFIED EXTERNALLY;

오라클 지원 문서 750436.1은 이를 상세한 단계로 확인합니다.

데이터베이스 시스템 자체 외부에서 /를 사용자 ID로 사용할 수 없다는 문제가 있습니다.또한 "/ sysdba"로 지정되지 않으면 /를 사용하여 데이터베이스에 연결할 수 없습니다.따라서 ADO와 같은 클라이언트 라이브러리를 통해 연결하려는 경우.NET 사용자 이름과 암호를 지정하지 않으면 연결에 실패합니다.

LDAP 사용자를 사용하여 데이터베이스에 액세스하기 위한 인증을 원하는 경우 OAM 및 ORACLE SSO와 OUD/EUM을 사용할 수도 있습니다.

언급URL : https://stackoverflow.com/questions/42835143/how-to-connect-with-system-data-oracleclient-to-oracle-db-with-windows-authentic