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

Oracle.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   [email protected]@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   [email protected]@...
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.

Для тех, кто занимается исследованиями, есть несколько способов обойти это.

  1. Вы можете изменить параметр реестра, расположенный по адресу HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled. Если FIPS включен, значение равно 1. Если отключено, значение равно 0. Вам не нужно перезагружаться.

  2. Скорее всего, причина, по которой вы столкнулись с этой проблемой, заключается в том, что FIPS включен, и вы используете управляемую библиотеку доступа к данным Oracle. Прочный обходной путь - использование неуправляемой библиотеки. Однако для использования этой библиотеки вам необходимо установить Oracle Instant Client. Клиент доступен для загрузки в компонентах доступа к данным Oracle.

  3. Обновите свой сервер до Oracle 12.2c. Версии Oracle 12c до 12.2c все еще имеют эту проблему.

Если у вас не включен FIPS, скорее всего, вам потребуется выяснить, имеет ли ваша база данных значение SEC_CASE_SENSITIVE_LOGON, установленное в значение true. Вам необходимо выполнить команду ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE; а затем сбросьте все ваши пароли.

4b9b3361

Ответ 1

Я боролся с этой самой проблемой в течение пары недель и, наконец, получил разрешение. Мне пришлось отключить политику безопасности FIPS, попробуйте установить этот ключ:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA\FipsAlgorithmPolicy] "Enabled" = DWORD: 00000000

до нуля, он отлично работал у меня

Я следил за вашей нитью, поэтому ваш пустой вопрос с паролем указал мне здесь:

https://community.oracle.com/thread/2557592?start=30&tstart=0

Ответ 2

На основании ответа Джеффа (10/31/2014)...

Параметр реестра может быть установлен GPO только для разрешенных FIPS-алгоритмов. Установка этого параметра на 0, как указано, может быть нарушением некоторых политик безопасности и быть перезаписана объектом групповой политики. Этот параметр реестра управляет не только IIS или ASP.NET.

Существует другой способ, характерный для .NET, и он может работать на уровне приложения. Это намного проще оправдать по сравнению с изменением настроек всего сервера.

Метод, специфичный для приложения:

В файле Web.config или App.config добавьте следующий параметр:

<configuration> <!-- Will already be there -->
  <runtime>
    <enforceFIPSPolicy enabled="false"/>
  </runtime>
...  the rest of your .config

Если я правильно помню, это должно быть в начале вашего файла конфигурации.

Весь метод .NET:

Поместите этот параметр выше в файл machine.config. Будет один для каждой версии и архитектуры .NET(64 бит /32 бит). Там уже будет элемент, поэтому поставьте внутри него элемент.

Ответ 3

У меня была та же проблема с использованием Entity Framework и Oracle.ManagedDataAccess.Client, но я добился определенного успеха, введя верхний регистр своего пароля в разделе строки конфигурации соединения.

Ответ 4

У меня не было такого же сценария, как в этом случае, но у меня были очень похожие результаты. Что я сделал, чтобы разобраться в проблеме, я вложил пароль в кавычки, как показано ниже (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"

Ответ 5

У меня была точно такая же проблема. Когда я подключался к базе данных непосредственно из SqlDeveloper, он работал нормально. Но мое приложение (построенное на VB6) не смогло подключиться к Oracle и выдало ошибку "ORA-01017 Неверный идентификатор/пароль.
После выключения, зависящего от регистра входа для моего идентификатора базы данных, он решил проблему.

Ответ 6

У меня такая же проблема! Я не пытался изменить RegKey, но я пытался изменить веб-конфигурацию и конфигурацию машины. Это не сработало.

Что решило проблему, так это изменение пула приложений, в котором я работает!

Пул приложений работал под учетной записью службы, и как только я переместил его в новый пул приложений, используя только системную учетную запись по умолчанию, он начал выбирать идентификатор пользователя и пароль из конфигурации.

Ответ 7

Я пытался с командой:

ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;

Но это не сработало. Мне пришлось изменить его с помощью разработчика SQL на вкладке DBA.

  1. Найдите параметр "sec_case_sensitive_logon" и измените его значение на "FALSE" enter image description here
  2. Зафиксируйте изменения, нажав кнопку: enter image description here
  3. Он запросит стратегию фиксации, и вы должны выбрать оба: enter image description here
  4. Нажмите "Применить"
  5. Я не знаю, требуется ли этот шаг, но я также изменил пароль пользователя. (Я установил тот же пароль)

В случае, если вы не знаете, как открыть "Параметры инициализации":

  1. Откройте "Oracle SQL Developer"
  2. Перейдите в меню "Вид" и выберите "DBA"
  3. Выберите соединение
  4. И затем нажмите "Параметры инициализации"

enter image description here

Ответ 8

Проверьте регистр имени пользователя и пароля.

Ответ 9

По какой-то причине (и понятия не имею, почему) мой код c # отправляет мое имя пользователя в верхнем регистре, даже если я пишу его в нижнем регистре.

Например, мое имя пользователя - kullaniciadi, вы можете подумать, что верхний регистр этого будет KULLANICIADI, но, похоже, это не так. Мой язык сервера - турецкий (я считаю, что это и есть причина), поэтому версия моего имени пользователя в верхнем регистре становится KULLANİCİADİ, потому что в турецком языке верхний регистр i - İ, а верхний регистр ı - I. И это приводит к неверной ошибке имени пользователя.

Не имел никакого контроля над базой данных, поэтому не может изменить какие-либо настройки в ней.

Ввод моего имени пользователя в верхнем регистре решил проблему.

Также это работает только в сочетании с принятым ответом. Если ключ реестра, указанный в принятом ответе, установлен на 1, этот ответ может не работать.

Потратил много часов на эту глупость. Я записываю это, так что вы не будете.

Ответ 10

Попробуйте использовать в качестве строки подключения одну из следующих:

  • Data Source=username/[email protected]//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;

Вы можете получить дополнительную информацию здесь.