Подтвердить что ты не робот

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

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

EDIT: SQL Developer не работает, если я проверяю флажок "Проверка подлинности ОС" (пустые и отключает имя пользователя + pwd). Более того, Preferences- > Database- > Advanced- > Use Oracle Client не проверяется, поэтому я думаю, что SQL Developer делает или не имеет очень мало общего с моей проблемой System.Data.OracleClient.OracleConnection.

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

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

Я получаю ORA-01017: неверное имя пользователя/пароль: logon denied

с

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: неверное имя пользователя/пароль: logon denied

С

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 работают, когда я указываю имя пользователя и пароль.

EDIT: это работает с

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

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

SQLNET.AUTHENTICATION_SERVICES= (NTS) 

изменяется на

SQLNET.AUTHENTICATION_SERVICES= (NONE)

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

4b9b3361

Ответ 1

Разработчик SQL иногда имеет непонятное поведение. Он не является надежным для этой функции аутентификации ОС.

Вы должны полностью удалить 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 Database, работающие как локальный пользователь Windows, по-прежнему проходят проверку подлинности с использованием NTLM.

Ответ 2

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

Ответ 3

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

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

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

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

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

Ответ 4

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

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