ORA-01005 ошибка соединения с ODP.Net

2

Я пытаюсь получить доступ к базе данных Oracle (версия 10.2.0.4.0), используя следующий код, но вызывается исключение "ORA-01005: Null password given; logon denied", вызываемое соединением при вызове метода open.

        var connBuilder = new OracleConnectionStringBuilder();
        connBuilder.DataSource = "(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = MyHost.Address)(PORT = ####)) )(CONNECT_DATA =(SERVICE_NAME = MyService)))";
        connBuilder.UserID = "validUserId";
        connBuilder.Password = "validPassword";
        connBuilder.PersistSecurityInfo = true;
        var connString = connBuilder.ToString();
        using (var con = new OracleConnection(connString))
        {
            con.Open();
        }

Если я меняю имя пользователя, вместо этого получаю следующее: "ORA-01017: неверное имя пользователя/пароль, отказ в регистрации", и это также происходит, если я изменю открытый вызов на соединение с con.OpenWithNewPassword("validPassword");

Если я попытаюсь использовать устаревший клиент Oracle, он без проблем справится:

        using (var depCon = new System.Data.OracleClient.OracleConnection
           ("Data Source=MyHost.Address:####/MyService;Persist Security Info=True;
             User ID=validUsername;Password=validPassword;Unicode=True"))
        {
            depCon.Open();
        } 

Я бы (очевидно) хотел бы использовать последние драйверы Odp.Net, но, похоже, не может пройти мимо этой проблемы. У кого-нибудь есть идеи?

  • 0
    Какая полная версия Oracle Database? Я считаю, что поддерживается только версия терминала 10.2. Что произойдет, если вы вообще не используете компоновщик строки подключения и просто жестко закодируете строку подключения с именем пользователя и паролем? Что произойдет, если вы удалите Persist Security Info = True; и Unicode = True?
  • 0
    Версия базы данных - «Oracle Database 10g Enterprise Edition Release 10.2.0.4.0». Удаление Persist Security и Unicode не имеет изменений, равно как и жесткое кодирование строки подключения. Сейчас я думаю, что что-то нужно установить на сервере, чтобы обеспечить доступ ODP.net к работе, но я не могу найти никакой документации для поддержки этого. Тем временем я в настоящее время использую устаревший (устаревший) драйвер, который успешно подключается.
Показать ещё 6 комментариев
Теги:
odp.net

3 ответа

2
Лучший ответ

Взгляните на эту тему на предмет соответствия требованиям FIPS:

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

также: Oracle.ManagedDataAccess и ORA-01017: неверное имя пользователя/пароль; logon denied

  • 0
    В следующий раз разверните свой ответ вместо ссылок на ответы других. Сначала я обошел это, потому что не хотел проходить через кучу ссылок. Если вы проводите исследование, поделитесь тем, что вы узнали, чтобы другие могли получить тот же ответ, что и вы, вместо того, чтобы копаться во всем. Кроме того, ссылки могут быть перемещены / становятся неработающими / мертвыми / отключенными. Именно в правилах SO по этой причине не предусмотрено ответов «только по ссылкам».
  • 0
    Ответ можно было бы просто подытожить: попробуйте изменить HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy\Enabled с 1 на 0 . Этот ответ был действительно тем, что сработало и в моей ситуации - просто хотелось, чтобы я видел, как это сделать раньше, поэтому я не стал публиковать свой собственный вопрос, чтобы добраться до него - dba.stackexchange.com/questions/142085/… , Но у него есть некоторые другие шаги по устранению неполадок, которые необходимо выполнить, чтобы подтвердить настройку человека, во-первых, это всегда хорошая идея, прежде чем приступать к взлому реестра.
1

Проблема с чувствительностью к регистру и драйверами ODP.Net и различными версиями БД должна быть простым решением. Приложите свой пароль к строке подключения в кавычки ("), например Password=\"password\";, и это должно содержать регистр пароля

  • 0
    Что-то попробовать, так что +1, но далеко не однозначное решение для всех случаев. Это не сработало для меня, но может с другими, если у них возникли проблемы с чувствительностью к регистру, а не проблема FIPS / ошибка Oracle, в принятом ответе.
  • 0
    Кроме того, если вы делаете это, вы эффективно применяете чувствительность к регистру. Когда я сделал это с параметром User Id в строке подключения, и мой пользователь был введен / передан как user и он действительно был USER в моей базе данных - он больше не мог войти в систему. Мне пришлось изменить его, чтобы передать в назовите как USER , тогда это сработало. Просто что-то, о чем нужно знать.
1

Работает ли он, когда вы делаете это так:

var connBuilder = new Common.DbConnectionStringBuilder();
connBuilder.Add("Data Source", "(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = MyHost.Address)(PORT = ####)) )(CONNECT_DATA =(SERVICE_NAME = MyService)))";
connBuilder.Add("User Id", "validUserId");
connBuilder.Add("Password", "validPassword");

Какую версию ODP.NET вы используете? Известны проблемы при подключении к "новой" базе данных Oracle с паролями с учетом регистра с использованием "старого" поставщика ODP.NET, см. Здесь: https://community.oracle.com/message/2198228

Чтобы проверить запуск этой команды в вашей базе данных:

ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;
  • 0
    Я использую Oracle 10g, у которого нет паролей, чувствительных к регистру, поэтому, к сожалению, это не проблема. Я использую пакет Oracle.ManagedDataAccess Nuget от Oracle - версия 12.1.022
  • 0
    Кроме того - боюсь, использование DbConnectionStringBuilder дает те же результаты. Радости пока нет.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню