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

Sql server 当网站托管在IIS中时无法打开数据库,sql-server,asp.net-mvc,iis,Sql Server,Asp.net Mvc,Iis,当我从VisualStudio运行我的网站时,一切正常。现在我正试图向前迈进,并开始测试多租户部分,所以我不得不将我的网站移至IIS 由于某种原因,我无法访问数据库。打开需要数据库访问的页面时出现的错误是: 无法打开登录请求的数据库“GWD”。登录失败。 用户“IIS APPPOOL\gwd”登录失败 异常详细信息:System.Data.SqlClient.SqlException:无法打开 登录请求的数据库“GWD”。登录失败。登录失败 对于用户“IIS APPPOOL\gwd” 另一个描述

当我从VisualStudio运行我的网站时,一切正常。现在我正试图向前迈进,并开始测试多租户部分,所以我不得不将我的网站移至IIS

由于某种原因,我无法访问数据库。打开需要数据库访问的页面时出现的错误是:

无法打开登录请求的数据库“GWD”。登录失败。 用户“IIS APPPOOL\gwd”登录失败

异常详细信息:System.Data.SqlClient.SqlException:无法打开 登录请求的数据库“GWD”。登录失败。登录失败 对于用户“IIS APPPOOL\gwd”

另一个描述了如何添加
NT AUTHORITY\networkservice
。但这并不能解决问题。我确实创建了
NT AUTHORITY\NETWORK服务
,并为所有现有数据库(包括master)添加了dbowner,但没有结果


我没主意了,有人能帮忙吗?

您还需要将应用程序池标识更改为
网络服务。启动Internet信息服务(IIS)管理器,深入到应用程序池,然后选择您正在使用的应用程序池。(不确定?深入到左侧站点下的虚拟目录,然后单击右侧的基本设置。)然后单击应用程序池,单击高级设置,然后将Process Model下的Identity更改为NetworkService


在SQL Server Management Studio中,您需要在数据库的安全性下添加
NT AUTHORITY\NETWORK SERVICE
用户,但听起来您已经这样做了。

@Nicholas Piasecki提供了一种可能的解决方案,另一种是保留应用程序池,而是授予它当前在数据库访问权限下运行的AppPoolIdentity

首先,您需要为用户“IIS APPPOOL\gwd”添加新的Windows登录到SQL Server

一旦您这样做了,您将能够以适当的权限将该用户添加到数据库中,就像您对网络服务所做的那样

您看到错误“无法打开登录请求的数据库”GWD。登录失败。用户“IIS APPPOOL\GWD…”的登录失败,因为您将应用程序复制到IIS服务器,并且在web.config文件中添加了成员资格提供程序,但没有applicationName属性

我建议您在提供者声明中添加一个“applicationName”属性。例如:

<membership>
<providers>
<add name ....
.
.
.
.
applicationName="/yourWebApp" />

</providers>
</membership>

只需查看aspnet_应用程序表,找出在开发期间创建用户/数据时使用的应用程序名称


希望能有帮助。

我想你一定要读这篇文章 在本文中,您将学习如何使用网络服务配置IIS和SQL Server(带有屏幕截图)

本文内容

  • 安装IIS
  • 为网络服务配置IIS
  • 配置SQL Server权限
在您的IIS上 选择您在站点上使用的应用程序池>右键单击>单击高级设置。在标识上选择“网络服务”

在您的数据库上[SQL] 为NT授权\网络服务创建登录名。修改用户映射


最快的方法似乎是为APPPOOL\gwd登录添加安全性。尝试这个解决方案:我更喜欢Nicolas的解决方案,但是+1可以提供工作替代方案!呵呵,有时候微软(docs.Microsoft)提供的解决方案似乎不起作用,但这是可行的。。呵呵!!thnx--我在本地IIS上遇到了一些实际问题,这就解决了。