当我从Visual Studio运行我的网站时,一切正常。现在我正在尝试前进并开始测试多租户部分,所以我不得不将我的网站移动到IIS。
由于某种原因,我无法访问数据库。打开需要数据库访问的页面时出现的错误是:
无法打开登录请求的数据库“GWD”。登录失败。 用户'IIS APPPOOL \ gwd'登录失败。
异常详细信息:System.Data.SqlClient.SqlException:无法打开 登录请求的数据库“GWD”。登录失败。登录失败 用户'IIS APPPOOL \ gwd'。
另一个forum介绍了如何添加NT AUTHORITY\NETWORK SERVICE
。但这并不能解决问题。我确实创建了NT AUTHORITY\NETWORK SERVICE
并为所有现有数据库(包括主数据库)添加了dbowner但没有结果。
我没有想法,有人可以帮忙吗?
答案 0 :(得分:6)
您还需要将应用程序池标识更改为NETWORK SERVICE
。启动Internet信息服务(IIS)管理器,深入查看应用程序池,然后选择您正在使用的应用程序池。 (不确定?深入查看左侧“站点”下的虚拟目录,然后单击右侧的“基本设置”。)然后单击“应用程序池”,单击“高级设置”,然后将“处理模型”下的“身份”更改为“NetworkService”。
在SQL Server Management Studio中,您需要在数据库的安全性下添加NT AUTHORITY\NETWORK SERVICE
用户,但听起来您已经这样做了。
答案 1 :(得分:2)
您看到登录请求的“无法打开数据库”GWD“错误。登录失败。用户'IIS APPPOOL \ gwd .....登录失败',因为您将应用程序复制到IIS服务器和成员身份在没有applicationName属性的web.config文件中添加了提供程序。
我建议您在提供者声明中添加“applicationName”属性。例如:
<membership>
<providers>
<add name ....
.
.
.
.
applicationName="/yourWebApp" />
</providers>
</membership>
只需查看aspnet_Application表,找出在开发过程中创建用户/数据时使用的应用程序名称。
我希望它有所帮助。
答案 2 :(得分:1)
@Nicholas Piasecki提供了一个可能的解决方案,另一个是将应用程序池保留为原样,而是授予AppPoolIdentity它当前正在访问数据库的情况下运行。
首先,您需要为用户添加新的Windows登录到SQL Server:'IIS APPPOOL \ gwd'。
一旦这样做,您就可以使用适当的权限将该用户添加到数据库,就像您对网络服务所做的那样。
答案 3 :(得分:0)
我认为你必须阅读这篇文章 Configure IIS, asp.net and SQL Server from codeproject 在本文中,您将学习如何使用Network SERVICE配置IIS和SQL Server(带屏幕截图)
本文内容
答案 4 :(得分:0)
在您的IIS上 选择您在站点上使用的应用程序池>右键单击>单击高级设置。在“身份”上,选择“ NetworkService”
在您的数据库上[SQL] 为NT AUTHORITY \ NETWORK SERVICE创建登录名。修改用户映射