12

Za pomocą Oracle SQL Developer mogę wstawić/-character do nazwy użytkownika i pozostawić puste hasło, aby uzyskać połączenie. Mam użytkownika OP $ MYWINDOWSUSERNAME utworzonego w bazie danych.Jak połączyć się z System.Data.OracleClient z Oracle oracle z uwierzytelnianiem Windows?

EDYCJA: SQL Developer nie działa, jeśli zaznaczam pole wyboru "Uwierzytelnianie systemu operacyjnego" (opróżnia i wyłącza nazwę użytkownika + pwd). Ponadto Preferencje-> Baza danych-> Zaawansowane-> Użyj klienta Oracle jest odznaczony, więc domyślam się, co SQL Developer ma lub nie ma bardzo niewiele wspólnego z moim problemem System.Data.OracleClient.OracleConnection.

Jednak gdy próbuję tworzyć ciąg połączenia tak:

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

uzyskać ORA-01017: nieprawidłową nazwę użytkownika/hasło: logowania zaprzeczył

z

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

uzyskać ORA -01005.

Z

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

uzyskać ORA-01017: nieprawidłową nazwę użytkownika/hasło: logowania zaprzeczył

Z

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

uzyskać ORA-01005

Z

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

uzyskać ORA-01017

Zarówno OracleConnection w moim programie i Oracle SQL Developer pracę kiedy podać nazwę użytkownika i hasło.

EDIT: To działa z

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

gdy sqlnet.ora linia

SQLNET.AUTHENTICATION_SERVICES= (NTS) 

zmienia się na

SQLNET.AUTHENTICATION_SERVICES= (NONE) 

Jeśli ktoś pisze krótką odpowiedź, co się dzieje i dlaczego, "z przyjemnością udzielę mu/jej nagrody.

+0

Po prostu usuń tokeny 'user id' &' password' –

+0

, to nie działa. to była moja pierwsza iteracja. –

+0

Ah podobno jego 'Data Source = myOracleDB; User Id = /;' - https://www.connectionstrings.com/net-framework-data-provider-for-oracle/windows-authentication/ –

Odpowiedz

1

Twoim problemem jest to, że nie możesz użyć/jako identyfikatora użytkownika spoza samego komputera bazy danych. również w niektórych przypadkach/nie można go użyć do połączenia z bazą danych, chyba że podano "/ as sysdba". dlatego w przypadku, gdy chcesz połączyć się z biblioteką klienta, taką jak ADO.NET, musisz podać nazwę użytkownika i hasło, inaczej połączenie się nie powiedzie.

jeśli chcesz mieć uwierzytelniania dostępu do bazy danych za pomocą użytkownik LDAP można również użyć OAM i Oracle SSO i OUD/eum

+0

, ale powiedziałem: "Z Oracle SQL Developer mogę umieścić nazwę użytkownika i pozostawić puste hasło". Mam na myśli ten sam komputer, który próbuje połączenia ADO.NET. tak/działa z innej maszyny. –

2

SQL Developer ma czasami ununderstandable zachowanie. Nie jest niezawodna w przypadku tej funkcji "Uwierzytelnianie systemu operacyjnego".

Należy usunąć id całkowicie z łańcucha uwierzytelniania:

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

Edytuj

Fakt, że to działa tylko wtedy, gdy opcja Zdjąć NTS może oznaczać oczekiwana usługa nie działa, albo że NTS nie obsługuje uwierzytelniania systemu operacyjnego dla wszystkich użytkowników, ale tylko dla tylko dla SYS. Znalezione: here objaśnienie:

Usługa NTS jest używana w środowiskach systemu Windows do uwierzytelniania użytkowników Sys na podstawie uwierzytelnienia na poziomie o/s. Więc jeśli nie chcesz podawać hasła użytkownika Sys za każdym razem, powinieneś to ustawić.

I here ktoś, kto używa coś można spróbować w swoich sqlnet.ora:

SQLNET.AUTHENTICATION_SERVICES =(NONE, NTS) 

może również zależeć od wersji Oracle; here it says NTS is not supported with Oracle 12c

Począwszy 12c Oracle Database Release 1 (12.1), przy czym NTS adapter uwierzytelniania nie obsługuje użycie NTLM do uwierzytelniania użytkowników domeny systemu Windows. W ten sposób NTS nie może być używany do uwierzytelniania użytkowników w starych domenach lub domenach Windows NT ze starymi kontrolerami domeny Windows NT. Jednak połączenia lokalne i usługi Oracle Database działające jako użytkownik lokalny systemu Windows są nadal uwierzytelniane przy użyciu NTLM.

+0

@matti, edytowane z więcej informacji –

2

Twój problem nie w ciągu połączenia, ale w swojej strukturze Active Directory oraz ustawienia Oracle dla zdolności do wykorzystania LDAP DB AD, co jest dlaczego przy próbie swój kod na lokalnym DB, np OracleXE, bez użycia aktywnych katalog prawdopodobnie się powiedzie, ale jednocześnie na rozproszonym serwerze Oracle możesz uzyskać błąd autoryzacji, więc znajdź silnego administratora, który skonfiguruje odpowiednie AD i Oracle.

+0

Proszę zobaczyć moją edycję. –

2

W skrócie, jest to uwierzytelnianie systemu Windows rodzimego systemu operacyjnego wskazane przez NTS.

Po NTS jest określony, klient Oracle identyfikuje użytkownika jako grupy roboczej \ nazwa użytkownika lub domena \ nazwa_użytkownika, który nie pasuje do PO $ MYWINDOWSUSERNAME użytkownika bazy danych

aby mieć to działa z opcją NTS, trzeba m.in. nazwa domeny/grupy roboczej w nazwie użytkownika bazy danych:

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

Dokument potwierdzający oracle 75043684 potwierdza to szczegółowymi krokami.