Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLNET.AUTHENTICATION\u SERVICES=(NTS)和ASP.NET_C#_Asp.net_Oracle_Authentication - Fatal编程技术网

C# SQLNET.AUTHENTICATION\u SERVICES=(NTS)和ASP.NET

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

我正在尝试使用访问oracle数据库

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_用户名的后缀是域名,在我的例子中,这是不存在的。 然后我做了两个改变

  • 修改了域名为kerb的应用程序池标识_user@xyz.com
  • 修改了app server上的sqlnet.ora文件,并将身份验证更改为“全部”
  • //之前-不工作

    SQLNET.AUTHENTICATION\u SERVICES=(无)

    //下班后

    SQLNET.AUTHENTICATION\u SERVICES=(全部)

    调试

  • 检查oracle日志,如果请求,OS_用户名后缀为域名(此处为kerb_user@xyz.com)或者不是。如果有后缀,则肯定有效

  • 请验证服务器两侧的服务用户(app-AD用户和db-service用户),用户应具有相同的名称

  • 验证db服务器上的服务用户访问权限,并确保用户必须具有对该数据库的kerberos访问权限

  • 检查SPN设置


  • Ref:

    谢谢,我认为网站不需要模拟。在按照您的建议配置新的应用程序池后,我已禁用了模拟,但我不确定如何“使池在具有oracle访问权限的帐户下运行”。我已使用windows的本地管理员对池进行身份验证。我仍然有同样的错误。是否有方法调试/记录试图从ASP.NET网站访问Oracle的用户名?您好-您应该将应用程序池的标识设置为域帐户(而不是本地帐户)。您选择的域帐户必须具有访问数据库的权限(有关详细信息,请参阅)。也许可以尝试在您自己的登录名下运行应用程序池,因为您知道您可以访问数据库。我已尝试将池身份验证更改为“psmea\administrator”,其中“psmea”是域名。这个用户就是我用来登录数据库服务器的用户。但这仍然是同样的错误。你知道我是否可以跟踪/记录/调试Oracle的错误吗?也许我可以在网站中看到导致错误的用户名,并将其与从控制台应用程序成功登录时的用户名进行比较。还是我看错了方向?我在谷歌上搜索了“windows oracle身份验证疑难解答”,结果又回来了:很遗憾,没有解决方案允许这两个身份验证服务共存(除了安装另一个驱动程序实例)。不喜欢Oracle“驱动程序”的另一个原因