Oracle.ManagedDataAccess.Ядро (3.21.41), Oracle Wallet с прокси-пользователем имеет ошибку ORA-01017: неверное имя пользователя / пароль; вход запрещен

#asp.net-core #.net-core #.net-5 #oracle19c #odp.net-managed

#asp.net-core #.net-ядро #.net-5 #oracle19c #odp.net-управляемый

Вопрос:

У меня приложение .net 5/6, и из-за требований соответствия меня просят использовать oracle wallet с прокси-пользователем (в строке подключения нет пароля). Чтобы упростить: новая строка подключения: Data Source=myproxy; User Id=/;

Я поместил следующие файлы в текущий рабочий каталог, т.е. bin / debug / net5.0:

  1. tnsnames.ora

пример данных файла:

 myproxy=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhostip)(PORT=myport))(CONNECT_DATA= (SERVICE_NAME =myservname)(SERVER=DEDICATED)))
 
  1. sqlnet.ora

пример данных файла

 SQLNET.WALLET_OVERRIDE = TRUE
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_VERSION = 0
WALLET_LOCATION =(SOURCE =(METHOD = FILE)(METHOD_DATA =(DIRECTORY=mydirectorieswallets)))
 

У меня есть приложение .net framework, которое отлично работает с вышеуказанными файлами и кошельками. Но, похоже, я не могу заставить его работать с приложением .Net Core. Я даже использовал OracleConfiguration.OnsWalletLocation , но мне совсем не повезло.

Вот пример ошибки:

 Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-01017: invalid username/password; logon denied
   at OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, OracleConnection connRefForCriteria, String affinityInstanceName, Boolean bForceMatch)
   at OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, OracleConnection connRefForCriteria, String affinityInstanceName, Boolean bForceMatch)
   at OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureString securedPassword, SecureString securedProxyPassword, OracleConnection connRefForCriteria)
   at Oracle.ManagedDataAccess.Client.OracleConnection.Open()
 

Ответ №1:

Вы должны использовать драйвер Oracle 19 DB для .NET Core вместо использования Oracle.ManagedDataAccess.Client . Это Oracle.ManagedDataAccess.Client специфично для .NET Framework.

Драйвер Oracle 19 DB для .NET Core доступен при вызове nuget, Oracle.ManagedDataAccess.Core а ссылка на nuget находится по адресу: https://www.nuget.org/packages/Oracle .ManagedDataAccess.Core /

Используйте Oracle.ManagedDataAccess.Core версию 3.21.4 или более позднюю для поддержки .NET 5.0, и этот nuget рекомендуется использовать для Oracle 12c или более поздней версии (например, Oracle 19).

Посмотрите зависимости: Oracle.ManagedDataAccess.Ядро nuget

Комментарии:

1. Я использую Oracle. ManagedDataAccess. Ядро 3.21.41. Я обновил заголовок вопроса. По ODP.Net Ядро, я имел в виду Oracle. ManagedDataAccess. Ядро, моя ошибка. Но с этим не повезло.

Ответ №2:

Мне удалось запустить oracle wallet с приложением .net5. Для меня на уровне приложения не было ничего плохого, кроме oracle wallet. Oracle wallet с прокси-пользователем у меня не работает, но я смог запустить oracle wallet с пользователем схемы и паролем.

Помимо создания кошелька, все остальное такое же, как и в приведенном выше вопросе. Вот команды создания кошелька, чтобы дать вам представление о том, что работает, а что нет.

Кошелек, который работает:

  1. Создать кошелек

mkstore -wrl . -create

  1. Создать учетные данные

mkstore -wrl . -createCredential myproxy mySchemaUserName mySchemaUserPassword

Кошелек, который не работает:

  1. Создать кошелек

mkstore -wrl . -create

  1. Создать учетные данные

mkstore -wrl . -createCredential myproxy myProxyUserName[mySchemaUserName] myProxyUserPassword

Убедитесь, что у вас есть Oracle.ManagedDataAccess.Core nuget в вашем решении, файлы tnsnames.ora и sqlnet.ora в вашей папке bin / debug или bin / debug / net5.0. Данные внутри файлов tnsnames.ora и sqlnet.ora должны быть такими, как в приведенном выше вопросе.