Я пытаюсь получить доступ к базе данных 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, но, похоже, не может пройти мимо этой проблемы. У кого-нибудь есть идеи?
Взгляните на эту тему на предмет соответствия требованиям FIPS:
https://community.oracle.com/thread/2557592?start=0&tstart=0
также: Oracle.ManagedDataAccess и ORA-01017: неверное имя пользователя/пароль; logon denied
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy\Enabled
с 1
на 0
. Этот ответ был действительно тем, что сработало и в моей ситуации - просто хотелось, чтобы я видел, как это сделать раньше, поэтому я не стал публиковать свой собственный вопрос, чтобы добраться до него - dba.stackexchange.com/questions/142085/… , Но у него есть некоторые другие шаги по устранению неполадок, которые необходимо выполнить, чтобы подтвердить настройку человека, во-первых, это всегда хорошая идея, прежде чем приступать к взлому реестра.
Проблема с чувствительностью к регистру и драйверами ODP.Net и различными версиями БД должна быть простым решением. Приложите свой пароль к строке подключения в кавычки ("), например Password=\"password\";
, и это должно содержать регистр пароля
User Id
в строке подключения, и мой пользователь был введен / передан как user
и он действительно был USER
в моей базе данных - он больше не мог войти в систему. Мне пришлось изменить его, чтобы передать в назовите как USER
, тогда это сработало. Просто что-то, о чем нужно знать.
Работает ли он, когда вы делаете это так:
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;