C# SQLNET.AUTHENTICATION\u SERVICES=(NTS)和ASP.NET
我正在尝试使用访问oracle数据库C# SQLNET.AUTHENTICATION\u SERVICES=(NTS)和ASP.NET,c#,asp.net,oracle,authentication,C#,Asp.net,Oracle,Authentication,我正在尝试使用访问oracle数据库 using System.Data.OracleClient; 从控制台应用程序访问数据库是可以的。但是,我从ASP.NET网站上得到错误: ORA-12640: Authentication adapter initialization failed 我在谷歌上搜索了一下,发现更改sqlnet.ora文件可以解决这个问题 //before SQLNET.AUTHENTICATION_SERVICES= (NTS) //after SQLNET.AUTH
using System.Data.OracleClient;
从控制台应用程序访问数据库是可以的。但是,我从ASP.NET网站上得到错误:
ORA-12640: Authentication adapter initialization failed
我在谷歌上搜索了一下,发现更改sqlnet.ora文件可以解决这个问题
//before
SQLNET.AUTHENTICATION_SERVICES= (NTS)
//after
SQLNET.AUTHENTICATION_SERVICES= (NONE)
后来我在同一台服务器上发现另一个应用程序,该应用程序也使用Oracle的其他数据库,它要求SQLNET.AUTHENTICATION\u SERVICES的值为“NTS”。这将导致我的网站无法访问数据库,错误为ORA-12640。我试过用“全部”作为价值观,但仍然不起作用
当sqlnet.ora配置为“sqlnet.AUTHENTICATION_SERVICES=(NTS)”时,如何配置我的网站以访问oracle数据库
另外,该网站使用Windows身份验证和模拟,如下所示:
<authentication mode="Windows"/>
<identity impersonate="true"/>
在我看来,这似乎是模拟问题
如果这是一种选择,我建议在访问数据库时让应用程序在单个标识下运行(这也应该允许连接池作为一种有益的副作用)
要做到这一点,您需要配置一个应用程序池,使其在有权访问Oracle的帐户下运行。应用程序在该应用程序池下运行后,请在应用程序中关闭模拟,以便使用应用程序池标识进行数据库调用
如果必须通过网络模拟调用用户,则使用的方法将取决于您的环境。有关更多信息,请参阅。我也面临同样的问题,但最终还是解决了。创建了一个服务帐户(active directory中名为kerb_user),并将应用程序池身份验证更改为以“kerb_user”身份运行。 首先我试过这个,但失败了。 请检查oracle数据库中的请求日志,您可以在其中仔细验证OS_用户名。在我的例子中,它显示了kerb_user,而对于其他kerberos用户,请求的OS_用户名的后缀是域名,在我的例子中,这是不存在的。 然后我做了两个改变
Ref:谢谢,我认为网站不需要模拟。在按照您的建议配置新的应用程序池后,我已禁用了模拟,但我不确定如何“使池在具有oracle访问权限的帐户下运行”。我已使用windows的本地管理员对池进行身份验证。我仍然有同样的错误。是否有方法调试/记录试图从ASP.NET网站访问Oracle的用户名?您好-您应该将应用程序池的标识设置为域帐户(而不是本地帐户)。您选择的域帐户必须具有访问数据库的权限(有关详细信息,请参阅)。也许可以尝试在您自己的登录名下运行应用程序池,因为您知道您可以访问数据库。我已尝试将池身份验证更改为“psmea\administrator”,其中“psmea”是域名。这个用户就是我用来登录数据库服务器的用户。但这仍然是同样的错误。你知道我是否可以跟踪/记录/调试Oracle的错误吗?也许我可以在网站中看到导致错误的用户名,并将其与从控制台应用程序成功登录时的用户名进行比较。还是我看错了方向?我在谷歌上搜索了“windows oracle身份验证疑难解答”,结果又回来了:很遗憾,没有解决方案允许这两个身份验证服务共存(除了安装另一个驱动程序实例)。不喜欢Oracle“驱动程序”的另一个原因