“IIS AppPool\ASP.NET v4.0”登录失败 - SQL Server Web

“IIS AppPool\ASP.NET v4.0”登录失败 - SQL Server Web

我正在尝试将网站从 SQL Server 2008 Express 迁移到 SQL Server Web,但该网站无法访问数据库。事实上,Express 只用于从 Visual Studio 的内置 Web 服务器运行网站,因此我不确定配置在功能齐全的 IIS 7 下是否能正常工作。无论如何,当我尝试访问使用 Linq to Entities(需要网站连接到数据库)的页面时,我收到错误“‘IIS AppPool\ASP.NET v4.0’登录失败”。因此,我打开了 SQL Server Management Studio,并尝试为用户添加登录名,但只收到一条消息,指出“未找到 Windows NT 或用户组‘*****\Asp.Net v4.0’”。即使我要求 Management Studio 检查用户的名称,它仍会成功检查,这种情况仍然会发生。有人能告诉我我做错了什么吗?此外,我也愿意接受其他建议……一切都在同一台服务器上运行,因此没有远程连接。因此,如果可能的话,我很乐意使用 Windows 身份验证。

答案1

IIS 7 正在尝试使用 IIS 应用程序池标识访问您的 SQL 数据库。

因此,您必须首先授予 IIS 7 应用程序池对 SQL 服务器的访问权限。

为此,请进入 SQL Server Management Studio -> 服务器实例 -> 安全 -> 登录 -> 新登录

登录名称将为“IIS APPPOOL\ASP.NET v4.0”。这是因为每次在 IIS7 中创建应用程序池时,它都会创建一个使用与您的应用程序池相同名称的标识。就您而言,您使用的是 asp.net 4 附带的默认应用程序池。

然后在您的数据库上,转到安全->登录->新登录,为其指定一个别名,然后选择您在上一步中添加的用户对象(IIS APPPOOL\ASP.NET v4.0),然后为其指定 db_owner(或任何您需要的)模式/角色权限。

答案2

编辑:请不要这样做——当我最初写这个答案时我并没有想到这一点。

要了解为什么我的原始答案不是一个好主意的更多详细信息,请查看下面评论中的链接。


另一个解决方案是进入 IIS 并编辑应用程序池本身以使用身份“LocalSystem”。可以通过右键单击应用程序池 -> 高级设置 -> 单击身份的“...”按钮(位于“进程模型”正下方)-> 在内置帐户下拉菜单下选择“LocalSystem”来找到它。

这样做的话您就不需要在数据库中设置新用户了。

答案3

只需按照下面的图片操作,并确保在 mappin 用户时选择数据库。

在此处输入图片描述

在此处输入图片描述

答案4

按照图中的步骤进行操作,并确保在最后一张图中选择您的数据库。

点击以下步骤查看图片:

步骤1

第2步

步骤:3

相关内容