Оракул.ManagedDataAccess и ORA-01017: неверное имя пользователя / пароль; вход запрещен
у меня сложная ситуация на одном из наших серверов. У меня есть ASP.NET приложение MVC 3, которое необходимо подключить к базе данных Oracle 12c. Он делает это, используя следующую строку подключения:
User ID=myuserid;Password=mypass;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<IP ADDRESS>)(PORT = 1521)))(CONNECT_DATA=(SERVICE_NAME=PDB1)));
Я также использую Oracle Oracle.ManagedDataAccess, версия 4.121.1.0. Каждая попытка подключения приводит к следующей ошибке:
ORA-01017: invalid username/password; logon denied
Я могу успешно подключиться на своем рабочем столе с указанными выше учетными данными. У меня такой же код на другом сервере, но используя более старую, неуправляемую версию библиотеки, она может успешно подключаться к вышеупомянутым учетным данным. Однако сервер, на котором я хотел бы запустить свой код, каждый раз терпит неудачу, используя те же учетные данные, которые позволяют успешно подключаться на разных серверах.
на сервере, который терпит неудачу, я могу:
- подключение через SQLPLUS
- хит базы данных с TNSPING
- создайте системный DSN для установки ODBC связи
Я проверил имена TNSNAMES.ORA во всех местах, и они кажутся правильными.
после попадания в базу данных слишком много раз учетная запись фактически заблокирована, указывая, что я действительно попал в базу данных и что базе данных не понравились представленные учетные данные. Я проверил приложения, которые ранее успешно подключались, и они также не удалось с ошибкой, указывающей, что учетная запись была заблокирована. Разблокировка аккаунта вызвала те приложения для успешного подключения, за исключением сервера, с которым у меня возникли проблемы.
Я в тупике.
у кого-нибудь есть другие предложения, что может вызвать эту проблему?
редактировать:
Я установил WireShark на свой локальный компьютер и на сервер-нарушитель. Я захватил связь между моим рабочим столом и базой данных, а также сервером-нарушителем и базой данных. Я обнаружил, что мой рабочий стол сообщил пароль:
0080 35 42 31 41 43 34 30 00 01 01 01 0d 0d 41 55 54 5B1AC40......AUT
0090 48 5f 50 41 53 53 57 4f 52 44 01 40 40 43 30 36 H_PASSWORD.@@C06
00a0 37 39 42 31 31 42 46 36 42 41 43 44 39 30 38 44 79B11BF6BACD908D
00b0 37 39 34 34 31 31 46 34 32 33 30 42 34 36 44 36 794411F4230B46D6
00c0 35 36 36 33 31 42 45 39 39 41 36 43 36 37 42 44 56631BE99A6C67BD
00d0 43 33 35 42 42 44 36 44 42 45 37 34 36 00 01 0d C35BBD6DBE746...
а сервер, с которым у меня возникли проблемы, Не (или, по крайней мере, это предположение):
0080 39 33 39 37 32 33 46 00 01 01 01 0d 0d 41 55 54 939723F......AUT
0090 48 5f 50 41 53 53 57 4f 52 44 01 40 40 00 00 00 H_PASSWORD.@@...
00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 0d ................
кто-нибудь знает параметр безопасности/конфигурации, который предотвратит передачу паролей, даже если они присутствуют в строке подключения?
изменить (20180713):
в моем конкретном случае проблема заключалась в настройке FIPS.
для тех, проводя исследования, есть несколько способов обойти это.
вы можете изменять параметры реестра в HKLMсистемаCurrentControlSet наконтрольЛСАFIPSAlgorithmPolicyвключен. Если FIPS включен, значение равно 1. Если отключено, значение равно 0. Перезагрузка не требуется.
скорее всего, причина, по которой вы столкнулись с этой проблемой, заключается в том, что FIPS включен, и вы используете библиотеку управляемого доступа к данным Oracle. Твердое решение использовать неуправляемую библиотеку. Однако для использования этой библиотеки необходимо установить клиент Oracle Instant. Клиент доступен для скачивания в Компоненты Доступа К Данным Oracle.
обновите сервер до Oracle 12.2 c. Версии Oracle 12c до 12.2 c все еще имеют эту проблему.
если у вас нет FIPS включен, скорее всего, вам нужно будет исследовать, имеет ли ваша база данных Значение параметра SEC_CASE_SENSITIVE_LOGON равно true. Вам нужно будет выполнить ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE; а затем сбросить все ваши пароли.
6 ответов
Я боролся с этой же проблемой в течение нескольких недель и, наконец, получил разрешение. Мне пришлось отключить политику безопасности FIPS, попробуйте установить этот ключ:
[раздел HKEY_LOCAL_MACHINE\система\CurrentControlSet на\контроль\ЛСА\FipsAlgorithmPolicy] "Включено" =dword: 00000000
до нуля, это отлично сработало для меня
Я следил за вашей нитью, ваша пустая проблема с паролем в конечном итоге указала мне здесь:
https://community.oracle.com/thread/2557592?start=30&tstart=0
на основе ответа Джеффа (10/31/2014)...
параметр реестра может быть установлен GPO только для разрешения алгоритмов, совместимых с FIPS. Установка этого значения в 0, как указано, может быть нарушением некоторых политик безопасности и перезаписывается GPO. Этот параметр реестра управляет не только IIS или ASP.NET - ...
существует еще один способ, специфичный для .NET и может работать на уровне приложения. Это намного проще обосновать по сравнению с изменением настроек весь сервер.
специфический метод применения:
в Интернете.config или App.файл конфигурации, добавьте следующий параметр:
<configuration> <!-- Will already be there -->
<runtime>
<enforceFIPSPolicy enabled="false"/>
</runtime>
... the rest of your .config
Если я правильно помню, это должно быть в начале вашего файла config.
все .NET метод приложения:
установите установку выше в машине.конфигурационный файл. Будет один для каждой версии и архитектуры .NET (64 бит / 32 бит). Там уже будет элемент, поэтому поместите элемент внутрь он.
попробуйте использовать одну из следующих строк подключения:
Data Source=username/password@//myserver:1521/my.service.com;
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID))); User Id=myUsername;Password=myPassword;
Вы можете получить больше информации здесь.
у меня не совсем был тот же сценарий, что и в этом случае, но у меня были очень похожие результаты. Что я сделал, чтобы разобраться в проблеме, я заключил пароль в кавычки, как показано ниже (VB.NET):
cnx.ConnectionString = "User ID=MYID;Password=""MyPass"" ;Data Source=MyTEST"
или используйте chr (34) следующим образом
cnx.ConnectionString = "User ID=MYID;Password="+chr(34)+"MyPass"+chr(34)+" ;Data Source=MyTEST"
У меня была точно такая же проблема. Когда я подключался к базе данных непосредственно из SqlDeveloper, он работал нормально. Но моему приложению (построенному на VB6) не удалось подключиться к Oracle и дать ошибку "Ora-01017 недопустимый идентификатор/пароль.
После выключения, учитывающего регистр входа для моего идентификатора базы данных, он решил проблему.
У меня была такая же проблема! Я не пытался изменить RegKey, но я попытался изменить конфигурацию web и machine. Это не сработало.
что решило проблему, это изменение пула приложений, под которым я работал!
пул приложений работал под учетной записью службы, и как только я переместил его в новый пул приложений только с системной учетной записью по умолчанию, он начал собирать идентификатор пользователя и пароль из конфигурации.