ORA-12638:凭据检索失败

时间:2008-12-18 20:37:23

标签: oracle

我有一个继承的遗留VB6应用程序。我面临的问题是我得到了臭名昭着的

ORA-12638: Credential retrieval failed
每当它尝试连接到我们的某个Oracle数据库时出现

错误消息。但是,我可以从SQLPlus和Toad连接好。我已经用Google搜索了,似乎每个人都说将sqlnet.ora文件修改为

SQLNET.AUTHENTICATION_SERVICES=(NONE)

做了这个伎俩。我还没有找到任何人有替代修复。这是我的连接字符串的样子:

"PROVIDER=OraOLEDB.Oracle;DATA SOURCE=(DESCRIPTION = " & _
"(ADDRESS = (PROTOCOL = TCP)(HOST = server1)
(PORT = 1521))" & _
"(ADDRESS = (PROTOCOL = TCP)(HOST = server2)
(PORT = 1521))" & _
"(LOAD_BALANCE = yes) " & _
"(CONNECT_DATA = " & _
"(SERVER = DEDICATED) " & _
"(SERVICE_NAME = database_name_here) " & _
") " & _
"); " & _
"User Id=username_here;Password=password_here;"

至于我的VB代码,它很简单。

Private oracleDatabaseConnection As ADODB.Connection

Set oracleDatabaseConnection = New ADODB.Connection
oracleDatabaseConnection.Open oracleConnectionString

有人有什么想法吗?

谢谢。 :)

6 个答案:

答案 0 :(得分:40)

我知道这是一篇非常古老的帖子,但我找到了一个对我有用的解决方案(Legacy VB6 Application):

更改sqlnet.ora文件中的以下条目:

Original Entry - SQLNET.AUTHENTICATION_SERVICES= (NTS)

Modified Entry - SQLNET.AUTHENTICATION_SERVICES= (NONE)

以下是解决方案的LINK

答案 1 :(得分:5)

老实说,这是许多不同根问题可能导致的错误之一。

假设您的数据库服务器是Windows,请检查其事件日志,包括系统和应用程序。你可能会发现有用的东西。

我在某些情况下遇到此错误,因为运行Oracle服务的帐户已被锁定。

在我们从未找到解释的情况下,我也遇到过这种情况,但我们总是能够通过让用户锁定并解锁他们的PC来解决问题。

VB应用程序是否在与可以连接的客户端不同的机器上运行?如果是这样,是否可以在同一台机器上使用不同的客户端程序进行测试 - 或者是否可以在您的机器上尝试VB应用程序?

答案 2 :(得分:2)

知道这是一个老问题,但它已经开始出现在最近的Windows更新中。 轻松解决它的方法是设置

SQLNET.AUTHENTICATION_SERVICES= (NONE)

在sqlnet.ora中。

答案 3 :(得分:1)

如果您在IIS下运行Web应用程序,则重新启动IIS似乎有所帮助。但这是一个没有太多理由背后的问题的傻瓜。

答案 4 :(得分:0)

我在Windows 10专业版64位(西班牙语版)上安装了32位Oracle Database 11g Express Edition。

重启PC后一切正常。
但是第二天,使用SQL * PLus和SQLTools 1.9 build 15会出错:

 ORA-12638: Credential retrieval failed

我将sqlnet.ora文件修改为:

SQLNET.AUTHENTICATION_SERVICES= (NONE)

现在我可以使用SQLPlus,SQLTools 1.9 build 15进行连接。

答案 5 :(得分:0)

如果使用 IIS 和 VB 应用程序,在 ODBC 管理器中创建一个新的数据源并在连接字符串中按名称(而不是提供程序)引用它可能会有所帮助。

例如,如果数据源的名称是“test_ds”,我会替换

ObjConn.open "Provider=MSDAORA;User ID=myuser;password=mypassword;Data Source=MYDATASOURCEFROMTNSNAMES;Persist Security Info=False"

为了

ObjConn.open "dsn=test_ds;pwd=mypassword"

无法真正解释解决方案背后的逻辑,但它对我有用。