Как подключиться к System.Data.OracleClient к oracle db с аутентификацией Windows?

С помощью Oracle SQL Developer я могу поместить / -character в Имя пользователя и оставить пароль пустым, и я подключусь. У меня есть пользователь OP$MYWINDOWSUSERNAME, созданный в базе данных.

РЕДАКТИРОВАТЬ: SQL Developer не работает, если я проверяю флажок проверки подлинности ОС (очищает и отключает имя пользователя + pwd). Более того, "Настройки" -> "База данных" -> "Дополнительно" -> "Использовать клиент Oracle" не проверяется, поэтому я предполагаю, что SQL Developer имеет или не имеет очень мало общего с моей проблемой System.Data.OracleClient.OracleConnection.

Однако, когда я пытаюсь сформировать строку подключения следующим образом:

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

Как OracleConnection в моей программе, так и Oracle SQL Developer работают, когда я указываю имя пользователя и пароль.

РЕДАКТИРОВАТЬ: Это работает с

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

когда строка sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES= (NTS) 

изменено на

SQLNET.AUTHENTICATION_SERVICES= (NONE)

Если кто-то напишет краткий ответ, что происходит и почему, я с радостью предоставлю ему / ей награду.

4 ответа

Короче говоря, это аутентификация операционной системы Windows, которая указана NTS.

После указания NTS клиент oracle идентифицирует имя пользователя как рабочую группу \username или domain\username, которое не соответствует вашему пользователю базы данных OP$MYWINDOWSUSERNAME

Чтобы он работал с опцией NTS, вам нужно включить имя домена / рабочей группы в ваше имя пользователя d b:

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

Документ поддержки оракула 750436.1 подтверждает это подробными шагами.

Ваша проблема не в строке подключения, а в структуре Active Directory и настройках Oracle для возможности использования LDAP DB в AD, поэтому, если вы попробуете свой код на локальной базе данных, например, OracleXE, без использования Active Directory, вы, вероятно, добьетесь успеха, но в то же время на распределенном сервере Oracle вы можете получить ошибку авторизации, поэтому найдите сильного администратора, который настроит ваши AD и Oracle должным образом.

SQL Developer имеет иногда непонятное поведение. Это не надежно для этой функции "аутентификации ОС".

Вы должны удалить id полностью из строки аутентификации:

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

редактировать

Тот факт, что он работает только тогда, когда вы удалите опцию NTS, может означать, что ожидаемая служба не работает, или что NTS не поддерживает аутентификацию ОС для всех пользователей, но только дляSYS, Нашел здесь некоторые объяснения:

Служба NTS используется в средах Windows для аутентификации пользователя Sys на основе аутентификации уровня o / s. Поэтому, если вы не хотите каждый раз вводить пароль пользователя Sys, вам следует установить это.

А вот тот, кто использует то, что вы могли бы попробовать в его sqlnet.ora:

SQLNET.AUTHENTICATION_SERVICES =(NONE, NTS)

Это также может зависеть от вашей версии Oracle; здесь говорится, что NTS не поддерживается с Oracle 12c

Начиная с Oracle Database 12c Release 1 (12.1), адаптер аутентификации NTS больше не поддерживает использование NTLM для аутентификации пользователей домена Windows. Таким образом, NTS нельзя использовать для аутентификации пользователей в старых доменах Windows NT или доменах со старыми контроллерами доменов Windows NT. Однако локальные соединения и службы базы данных Oracle, работающие как локальный пользователь Windows, продолжают проходить проверку подлинности с использованием NTLM.

Ваша проблема в том, что вы не можете использовать / в качестве идентификатора пользователя вне самой машины базы данных. также в некоторых случаях / не может использоваться для подключения к базе данных, если не указано "/ as sysdba". поэтому, если вы хотите подключиться через клиентскую библиотеку, такую ​​как ADO.NET, вы должны указать имя пользователя и пароль, иначе соединение не будет установлено.

если вы хотите иметь аутентификацию для доступа к базе данных с использованием пользователя LDAP, вы также можете использовать OAM и ORACLE SSO и OUD/EUM

Другие вопросы по тегам