0

我在 IIS7 上运行一个 asp .net web 服务。后者在 Windows 2008 R2 服务器上运行。IIS7/web 服务配置为 asp .net 模拟。工作进程所有者设置为 NETWORK SERVICE。

Web 服务调用在服务器上用他/她的域帐户模拟的 sqlplus.exe。我可以通过任务管理器看到这一点。但是,当启动 sqlplus 时,oracle 说用户名/密码错误。

sqlplus.exe 是这样启动的: sqlplu.exe / . 如果我使用用户帐户手动登录服务器并输入上面的语句,这很好用,一切都很好

4

1 回答 1

3

我相信您在这里遇到了“双跳”问题。

您的第一个跃点是使用从客户端计算机到 Web 服务器的模拟。第二个跃点是从 Web 服务器到您的数据库服务器,您尝试将这些相同的凭据传递给数据库。

当您手动登录并运行 sqlplus 语句时,它只是从 Web 服务器到数据库服务器的单跳。

以下引自 MSDN。请注意使用从客户端到 Web 服务器的基本身份验证的建议。

当 ASPX 页面尝试使用位于不同于 IIS 服务器的服务器上的资源时,会出现双跃点问题。在我们的例子中,第一个“跳跃”是从 Web 浏览器客户端到 IIS ASPX 页面;第二个跃点是到 Active Directory。Active Directory 需要主令牌。因此,IIS 服务器必须知道客户端的密码才能将主令牌传递给 Active Directory。如果 IIS 服务器具有辅助令牌,则使用 NTAUTHORITY\ANONYMOUS 帐户凭据。此帐户不是域帐户,对 Active Directory 的访问权限非常有限。

例如,当浏览器客户端使用 NTLM 身份验证对 IIS ASPX 页面进行身份验证时,就会发生使用辅助令牌的双跳。在此示例中,由于使用 NTLM,IIS 服务器具有密码的散列版本。如果 IIS 转而将凭据传递给 Active Directory,则 IIS 正在传递一个散列密码。Active Directory 无法验证密码,因此它使用 NTAUTHORITY\ANONYMOUS LOGON 进行身份验证。

如果您的浏览器客户端使用基本身份验证对 IIS ASPX 页面进行身份验证,则 IIS 服务器具有客户端密码,并且可以制作一个主令牌以传递给 Active Directory。Active Directory 可以验证密码并对域用户进行身份验证。

http://msdn.microsoft.com/en-us/library/ms817871.aspx

于 2010-02-17T02:08:06.763 回答