SQLNET.AUTHENTICATION_SERVICES =(NTS)和ASP.NET

时间:2010-01-21 16:55:48

标签: c# asp.net oracle authentication

我正在尝试使用

访问oracle数据库
using System.Data.OracleClient;
从控制台应用程序

访问数据库很好。但是从ASP.NET网站我得到错误:

ORA-12640: Authentication adapter initialization failed

我已经google了一下,发现更改sqlnet.ora文件可以解决问题

//before
SQLNET.AUTHENTICATION_SERVICES= (NTS)
//after
SQLNET.AUTHENTICATION_SERVICES= (NONE)

后来我在同一台服务器上发现了另一个使用Oracle其他数据库的应用程序,要求SQLNET.AUTHENTICATION_SERVICES的值为“NTS”。这将导致我的网站无法访问数据库,错误ORA-12640。我试过“ALL”作为价值,但它仍然没有用。

如果将sqlnet.ora配置为“SQLNET.AUTHENTICATION_SERVICES =(NTS)”,如何配置我的网站以访问oracle数据库?

P.S。该网站使用Windows身份验证和模拟如下:

<authentication mode="Windows"/>
<identity impersonate="true"/>

2 个答案:

答案 0 :(得分:3)

这看起来像multi-hop模仿问题。

如果它是您的选项,我建议您在访问数据库时让您的应用程序在单个标识下运行(这也应该允许连接池作为有益的副作用发生)。

要执行此操作,您需要将应用程序池配置为在有权访问Oracle的帐户下运行。应用程序在该应用程序池下运行后,在应用程序中关闭模拟,以便使用应用程序池标识进行数据库调用。

如果您必须通过网络模拟主叫用户,则使用的方法取决于您的环境。有关详细信息,请参阅How to Use Impersonation and Delegation in ASP.NET 2.0

答案 1 :(得分:0)

我也遇到了同样的问题,但终于让它运转了。创建了一个服务帐户(在活动目录中名为kerb_user),并将应用程序池身份验证更改为&#34; kerb_user&#34;。 首先我尝试了这个,但它失败了。 请检查oracle数据库中的请求日志,您可以在其中仔细验证OS_USERNAME。在我的情况下它显示kerb_user,其他kerberos用户请求的OS_USERNAME后缀为域名,在我的情况下缺少。 然后我做了两处改动。

  1. 使用域名修改了应用池标识 - kerb_user@xyz.com
  2. 修改了应用服务器上的sqlnet.ora文件,并将身份验证更改为&#34; ALL&#34;
  3. //之前 - 不工作

    SQLNET.AUTHENTICATION_SERVICES =(NONE)

    // after-working

    SQLNET.AUTHENTICATION_SERVICES =(ALL)

    <强>调试

    1. 检查oracle日志,如果请求OS_USERNAME后缀为域名(此处为kerb_user@xyz.com),如果是后缀,则肯定会有效。

    2. 请在(app和db)服务器上验证,帐户名称应相同。

    3. 验证数据库服务器上的用户是否具有对该数据库的kerberos访问权限。

    4. 检查SPN设置

    5. 参考:https://www.codeproject.com/Articles/27554/Authentication-in-web-services-using-C-and-Kerbero