У меня сложная ситуация на одном из наших серверов. У меня есть приложение 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.
Для тех, кто занимается исследованиями, есть несколько способов обойти это.
-
Вы можете изменить параметр реестра, расположенный по адресу HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled. Если FIPS включен, значение равно 1. Если отключено, значение равно 0. Вам не нужно перезагружаться.
-
Скорее всего, причина, по которой вы столкнулись с этой проблемой, заключается в том, что FIPS включен, и вы используете управляемую библиотеку доступа к данным Oracle. Прочный обходной путь - использование неуправляемой библиотеки. Однако для использования этой библиотеки вам необходимо установить Oracle Instant Client. Клиент доступен для загрузки в компонентах доступа к данным Oracle.
-
Обновите свой сервер до Oracle 12.2c. Версии Oracle 12c до 12.2c все еще имеют эту проблему.
Если у вас не включен FIPS, скорее всего, вам потребуется выяснить, имеет ли ваша база данных значение SEC_CASE_SENSITIVE_LOGON, установленное в значение true. Вам необходимо выполнить команду ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE; а затем сбросьте все ваши пароли.