我正在尝试使用
访问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"/>
答案 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后缀为域名,在我的情况下缺少。 然后我做了两处改动。
//之前 - 不工作
SQLNET.AUTHENTICATION_SERVICES =(NONE)
// after-working
SQLNET.AUTHENTICATION_SERVICES =(ALL)
<强>调试强>
检查oracle日志,如果请求OS_USERNAME后缀为域名(此处为kerb_user@xyz.com),如果是后缀,则肯定会有效。
请在(app和db)服务器上验证,帐户名称应相同。
验证数据库服务器上的用户是否具有对该数据库的kerberos访问权限。
检查SPN设置
参考:https://www.codeproject.com/Articles/27554/Authentication-in-web-services-using-C-and-Kerbero