在IIS中托管网站时无法打开数据库

时间:2013-02-02 13:17:00

标签: sql-server asp.net-mvc iis

当我从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但没有结果。

我没有想法,有人可以帮忙吗?

5 个答案:

答案 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(带屏幕截图)

本文内容

  • 安装IIS
  • 为网络服务配置IIS
  • 配置SQL Server权限

答案 4 :(得分:0)

在您的IIS上 选择您在站点上使用的应用程序池>右键单击>单击高级设置。在“身份”上,选择“ NetworkService”

enter image description here

在您的数据库上[SQL] 为NT AUTHORITY \ NETWORK SERVICE创建登录名。修改用户映射

enter image description here

相关问题