【问题标题】:Trouble with window authentication on IIS 7IIS 7 上的窗口身份验证问题
【发布时间】:2014-06-27 22:04:49
【问题描述】:

我正在尝试设置一个测试服务器以在将 asp.net (3.5) Web 应用程序移至生产环境之前对其进行试用。我想从生产服务器镜像 IIS 中的设置。在我的 Web 应用程序中,应用程序池设置为 Classic .NET AppPool,标识为 NetworkService,并启用了 Windows 身份验证。当我尝试访问测试服务器上的应用程序时,出现错误“The EXECUTE permission was denied on the object 'GetTable', database 'DatabaseName', schema 'xxx'。我意识到我可以将网络帐户添加到该存储过程的安全性中,但我不应该这样做 - 没有它它可以在生产环境中工作。

我正在使用生产数据库的恢复副本,因此两者之间的权限相同。我确实必须将查询测试服务器名称(即 xxx\Test$)添加到 SQL Server 中的 database security 以获得对数据库的访问权限,但我不应该添加其他本地网络权限因为它们包含在 SQL 的安全登录(公共)中。

在测试服务器上的 Windows 事件日志 * 中,这条错误详细信息让我感到困扰,因为“线程帐户名称是 NT AUTHORITY\NETWORK SERVICE 与在生产服务器上引发权限错误时线程帐户名称是用户。

我想我需要让测试服务器识别真实用户。我(显然)还没有完全理解网络应用程序的安全性。 有人可以建议我调查的其他领域吗?我确实研究了这个,但我只找到了诸如如何更改 apppool 帐户或身份之类的东西,而不是解决客户端到 Web 服务器之间权限问题的部分到数据库服务器。顺便说一句,生产和测试数据库在同一台服务器上。产品和测试应用程序位于不同的服务器上(均为 Server 2008/IIS 7)。

有一个区别:ASP.NET 1.1 应用程序池没有安装在测试服务器上的 IIS 上。会不会是这个问题?

*Windows 事件日志 sn-p:

Request information: 
    Request URL: http://server/appname/default.aspx 
    Request path: /appname/default.aspx 
    User host address: xx.xxx.xx.xx 
    User: xxx\username 
    Is authenticated: True 
    Authentication Type: Negotiate 
    **Thread account name: NT AUTHORITY\NETWORK SERVICE**

顺便说一句,如果我将测试应用程序移动到新文件夹中的生产服务器,它可以正常工作。问题在于测试服务器配置。

回答:将 IIS 服务器的 Active Directory 设置为“信任此计算机进行委派”。我从 plq 发布的 2007 年条目中找到了答案:Microsoft ASP.NET forum

【问题讨论】:

  • ASP.NET 1.1 应用程序池是无关紧要的,除非您正在运行一个 1.1 应用程序(听起来不像是)。听起来您需要将应用程序设置为模拟,因此它将采用登录用户的身份,而不是应用程序池的身份。看看生产中的其他应用是如何配置的,看看配置文件是否有任何差异。

标签: c# asp.net sql-server iis


【解决方案1】:

解答:将 IIS 服务器的 Active Directory 设置为“信任此计算机进行委派”。我从 'plq' 在此论坛上发布的 2007 年条目中找到了答案:Microsoft ASP.NET forum

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多