【问题标题】:ORA-12638: Credential retrieval failedORA-12638: 凭证检索失败
【发布时间】:2022-05-12 14:23:03
【问题描述】:

我有一个继承的旧版 VB6 应用程序。我面临的问题是我越来越臭名昭著

ORA-12638: Credential retrieval failed

每当它尝试连接到我们的 Oracle 数据库之一时都会出现错误消息。但是,我可以从 SQLPlus 和 Toad 很好地连接。我用谷歌搜索了一下,似乎每个人都说将他们的 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

有人有什么想法吗?

谢谢。 :)

【问题讨论】:

    标签: oracle


    【解决方案1】:

    我知道这是一篇很老的帖子,但我找到了一个对我有用的解决方案(旧版 VB6 应用程序):

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

    Original Entry - SQLNET.AUTHENTICATION_SERVICES= (NTS)
    
    Modified Entry - SQLNET.AUTHENTICATION_SERVICES= (NONE)
    

    这是解决方案的LINK

    【讨论】:

    • +1。我刚刚从文件中删除了SQLNET.AUTHENTICATION_SERVICES 行,它也有效。
    • 我得到了 ORA-01031:设置 NONE 后权限不足
    • 谢谢。它奏效了。
    【解决方案2】:

    老实说,这是由许多不同的根本问题引起的错误之一。

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

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

    我也遇到过我们从未找到解释的情况,但我们总是能够通过让用户锁定和解锁他们的电脑来解决问题。

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

    【讨论】:

    • 我第一次遇到这个问题,锁定/解锁就可以了。我正在使用已从休眠模式恢复的 Windows XP VM。它运行的主机最近请求更改密码,这可能是原因(尽管 VM 在不同的(虚拟)网络中使用不同的用户帐户。
    • 如何查明Oracle服务正在使用哪个账户?你是指服务器服务还是客户端服务?
    • @Aurinxki 我的意思是数据库服务器服务。在 Windows 上,您可以查看服务并查看服务是否配置为在特定帐户中运行;或者可能使用 Process Explorer 之类的工具来定位正在运行的进程并查看它在哪个帐户中运行。在 Linux 或 Unix 上,您可以使用 ps 来查看进程。
    【解决方案3】:

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

    SQLNET.AUTHENTICATION_SERVICES= (NONE)
    

    在 sqlnet.ora 中。

    【讨论】:

      【解决方案4】:

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

      重启电脑后一切正常。
      但是第二天我在使用 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】:

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

        【讨论】:

          【解决方案6】:

          如果使用 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"
          

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

          【讨论】:

            【解决方案7】:

            另请注意,使用 Windows Hello 登录时,Windows 客户端连接可能会因此错误而失败。

            无论 Windows 身份验证如何进行连接,例如: sqlplus un/pw@Dev

            当我使用人脸识别登录我的笔记本电脑(即使用 Hello)时,出现 ora-12638 失败 要解决此问题,请设置 SQLNET.AUTHENTICATION_SERVICES = (NONE) 或者只需使用您的传统 Windows 用户名和密码登录。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-09-17
              相关资源
              最近更新 更多