我有一个运行Windows Server 2012 R2,IIS 8.5(包括ClassicASP功能)和SQL Server 2014 Express的新服务器版本。我想使用应用程序池标识连接到数据库。数据库设置为“Windows身份验证模式”。
我的应用程序池标识名为activbase.net
。我在SQL Server中设置了一个名为IIS AppPool\activbase.net
的安全登录,用户使用db_datareader
和db_datawriter
访问权限将其映射到我的数据库。
但是,当我尝试从网站访问数据库时,我得到:
无法打开登录请求的数据库“ActivbaseLive”。登录失败。
我认为这足以让连接正常工作。 应用程序日志(事件查看器)显示:
用户'NT AUTHORITY \ IUSR'登录失败。原因:无法打开显式指定的数据库'ActivbaseLive'。 [客户:]
所以我已将NT AUTHORITY\IUSR
同样添加到SQL Server>安全性>登录和数据库> [ActivbaseLive]>安全>用户,这样就解决了这个问题。
我的问题如下:
NT AUTHORITY\IUSR
登录/用户之外,我是否还需要将IIS AppPool\activbase.net
登录/用户添加到我的SQL Server实例和数据库中?谢谢, 克里斯
答案 0 :(得分:2)
不。除了NT AUTHORITY\IUSR
身份外,您无需为IIS AppPool\activbase.net
身份添加SQL Server登录名。仅使用IIS AppPool\activbase.net
应用程序池标识登录就足以使用Windows身份验证连接到SQL Server。
NT AUTHORITY\IUSR
是一个内置Windows帐户,它是为您的应用程序启用匿名身份验证时使用的默认身份。 This page描述了帐户的基本原理。
要以IIS AppPool\activbase.net
身份连接到数据库,您需要将为匿名用户设置的帐户从NT AUTHORITY\IUSR
更改为IIS AppPool\activbase.net
应用程序池身份。请按照以下步骤进行更改:
下面链接中的问题(及其答案)解决了同一问题:
Login failed for user NT AUTHORITY\IUSR
关于第二个问题,“这样做是否存在安全问题?”,答案是“是”。您最好不要让NT AUTHORITY\IUSR
内置帐户访问您的SQL Server数据库,因为它用作IIS Web服务器上托管的任何其他网站(及其应用程序)的默认匿名帐户。这意味着那些其他网站和应用程序将能够连接到您的数据库。如果它们在攻击中受到威胁,则可能会被用来访问您的数据。因此,最好不要为NT AUTHORITY\IUSR
使用SQL Server登录名。而是将数据库访问权限限制为您网站(或应用程序)的应用程序池标识。