Oracle.ManagedDataAccess.Client.OracleException:ORA-01017:无效的用户名/密码;登录被拒绝

使用ODP.NET版本19.3(可用的最新Oracle Managed Dataaccess)通过安全外部密码存储(SEPS)连接到Oracle 11g时遇到问题,其中Oracle登录凭据存储在客户端中Oracle钱包。

如果我切换到传统的登录名/密码连接字符串,则数据库连接和命令没有问题。

此外,我报告说,使用经典ODP 11(非托管Dataaccess)的所有其他.net应用程序在SEPS模式下连接都没有问题。实际上,我正在建立将ODP.NET 19.3与SEPS和Oracle钱包模式一起使用的第一种情况。

为了我有:

  1. 为我们的应用程序创建了一个钱包(带有mkstore utils)并将其放置在服务器目录中,即

      

    C:\ users \%APP_POOL_ID%\ wallet

  2. 为所有应用程序创建了一个sqlnet.ora文件,并将其放在服务器的Oracle Home目录中:即

      

    %ORACLE_HOME%\ Network \ Admin

具有以下内容:

SQLNET.AUTHENTICATION_SERVICES=(NTS)
NAMES.DIRECTORY_PATH=(TNsnAMES,LDAP,EZCONNECT,HOSTNAME)
names.ldap_conn_timeout = 1
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=c:\users\%APP_POOL_ID%\wallet)))
SQLNET.WALLET_OVERRIDE = TRUE
DIAG_ADR_ENABLED = off
  1. 使用以下ConnectionString:

    Data Source=DS_NAME_1; User ID=[USER_ID_1];Proxy User Id=[USER_ID_1];
    

注意:用户ID和代理用户ID在连接字符串中用方括号指定。

这是我们获得的堆栈跟踪的例外情况:

  

Oracle.ManagedDataaccess.Client.OracleException:ORA-01017:无效的用户名/密码;登录被拒绝

     

在OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd,布尔值bGetForApp,OracleConnection connRefForCriteria,字符串亲和力实例名称,布尔值bForceMatch)

     

在OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword,布尔值bGetForApp,OracleConnection connRefForCriteria,字符串亲和力实例名称,布尔值bForceMatch)

     

OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs,PM conPM,ConnectionString pmCS,SecureString securePassword,SecureString secureProxyPassword,OracleConnection connRefForCriteria)

     

在Oracle.ManagedDataaccess.Client.OracleConnection.Open()

这是我通过<oracle.manageddataaccess.client> config部分启用的跟踪的一部分:

>[...]
>(PRI) (TUN) OracleTuningAgent::Unegister(): Unegistered pool Data Source=DS_NAME_1; User ID=;Proxy User Id=[USER_ID_1];
>[...]

另外,在另一个跟踪文件中,可能会看到 WriteOAuthMessage将空白密码传递给DB

>(PRI) (TTC) (EXT) TTCAuthenticate.ReadOSessKeyResponse()
>(PRI) (SVC) (ENT) OracleConnectionImpl.CheckForAnyErrorFromDB()
>(PRI) (SVC) (EXT) OracleConnectionImpl.CheckForAnyErrorFromDB()
>(PRI) (TTC) (ENT) TTCAuthenticate.WriteOAuthMessage()
>(PRI) (TTC) (ENT) TTCAuthenticate.WriteOAuthMessage()
>(PRI) (TTC) (ENT) TTCFunction.WriteFunctionHeader()
>(PRI) (TTC) (ENT) TTCMessage.WriteTTCCode()
>(PRI) (TTC) (EXT) TTCMessage.WriteTTCCode()
>(PRI) (TTC) (EXT) TTCFunction.WriteFunctionHeader()
>(PRI) (TTC) (EXT) TTCAuthenticate.WriteOAuthMessage()
>(PRI) (TTC) (EXT) TTCAuthenticate.WriteOAuthMessage()
>(NET) (snD) 00 00 03 80 06 00 00 00   |........|
>(NET) (snD) 00 00                     |..      |
>(NET) (snD) 03 73 00 01 01 06 02 01   |.s......|
>[..user removed..]
>(NET) (snD) 41 55 54 48 5F 50 41 53   |AUTH_PAS|
>(NET) (snD) 53 57 4F 52 44 01 40 40   |SWORD.@@|
>(NET) (snD) 00 00 00 00 00 00 00 00   |........|
>(NET) (snD) 00 00 00 00 00 00 00 00   |........|
>(NET) (snD) 00 00 00 00 00 00 00 00   |........|
>(NET) (snD) 00 00 00 00 00 00 00 00   |........|
>(NET) (snD) 00 00 00 00 00 00 00 00   |........|
>(NET) (snD) 00 00 00 00 00 00 00 00   |........|
>(NET) (snD) 00 00 00 00 00 00 00 00   |........|
>(NET) (snD) 00 00 00 00 00 00 00 00   |........|

我排除了这个问题,因为登录/密码确实是错误的,方法是使用用户凭据登录服务器并通过sqlplus命令测试与数据库的连接。

有人可以帮助我吗?

非常感谢!

duoduoyishanjiang 回答:Oracle.ManagedDataAccess.Client.OracleException:ORA-01017:无效的用户名/密码;登录被拒绝

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3121408.html

大家都在问