5个回答

10

通常,你会为工作进程选择不同的标识(或进行ASP.NET模拟),因为需要访问需要特定权限的本地/网络资源。显而易见的缺点是,你的应用程序代码可能会在比它所需的权限更高的权限下运行,从而增加遭受恶意攻击的风险。

ASP.NET模拟将具有更多开销,因为需要为每个请求切换用户上下文。我建议采用单独的应用程序池方法-应用程序池方法的唯一缺点在于,您必须为每个应用程序池创建进程,因此会存在一些开销(从操作系统的角度来看)。如果你的应用程序规模较小而且没有很强的内存需求,那么这不应该是一个问题。


4
如果您希望通过Windows身份验证连接到SQL,几乎肯定要使用专用应用程序池选项设置每个应用程序。这需要最少的设置和管理。
如果您选择模拟身份路线,则需要考虑“双跳”问题。当用户调用使用模拟身份的Web服务时,Web服务可以作为该用户访问本地资源。但是,如果Web服务尝试连接到非本地资源(例如,在单独的服务器上运行的数据库),则结果将是身份验证错误。原因是NTLM防止您的凭据进行多次“跳转”。为了解决此问题,您需要使用Kerberos委派。委派并不难设置,但它需要域管理员权限,这可能会在某些公司环境中造成困难。
此外,使用模拟身份意味着您需要为可能访问您的Web服务的每个用户管理数据库权限。数据库角色和AD组的组合将在简化此过程方面发挥重要作用,但这是一项额外的管理步骤,您可能不想执行。这也是可能的安全风险,因为某些用户可能会获得比您的Web服务预期的更高特权。

2

应用程序池的优点:

你不必成为.Net程序员就能理解发生了什么。

安全方面落在基础设施范畴内,而不是程序员的权限范围内。

通过IIS轻松更改,但需进行合适的安全检查以确保在设置应用程序池时输入的用户名正确。例如:它不会让您输入错误的用户名。

模拟用户的优点:

  1. 可以通过存储配置文件来记录特权并跟踪更改历史,如果在那里存储配置文件。

模拟用户的缺点:

  1. 要更改用户,您需要熟悉.Net配置而不仅仅是设置网站。

我不确定还有什么别的要考虑的。

我的直觉是为每个网站使用不同的应用程序池,但这是你的决定。


2
“冒名顶替”在需要与其他基于Windows安全的Windows服务具有常见终端用户体验时很有用。
例如,Microsoft SharePoint服务器使用冒名顶替,因为您可以通过Web浏览器和标准的Windows共享UI(基于SMB协议连接/断开到网络共享)访问SharePoint文档库。 为确保两者之间的安全性一致,在这种情况下,您需要使用冒名顶替。
除此类场景外,冒名顶替大多数情况下都没有用处(但在可扩展性方面可能会付出很高的代价)。

0

1
链接已失效,我认为这是您想要链接的页面(并希望此链接能够持续)。链接 - Kirsten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接