使用iis的主机.net核心应用程序会出现数据库访问错误

时间:2018-02-14 16:07:05

标签: sql iis asp.net-core-2.0

我有一个.Net Core 2.0应用程序,我在IIS 7中托管。

使用IIS Express,应用程序运行正常,并且我能够成功连接到数据库。使用IIS我收到此错误:

  

无法打开登录请求的数据库"Books"。登录失败。用户'DOMAINNAME\PCNAME$'登录失败。

appsettings.production.json文件中的我的connectionString如下所示:

"ConnectionStrings": {
 "BooksDatabase": "Server=PCNAME\\SQLEXPRESS;Database=Books;user id=iisAccess;password=iisPassword;Trusted_Connection=True;ConnectRetryCount=0;MultipleActiveResultSets=true"
};

我做错了什么,为什么说"登录失败?' DOMAINNAME \ PCNAME $'"当我将凭据user id=iisAccess;password=iisPassword;放入我的JSON文件中时?

2 个答案:

答案 0 :(得分:3)

您要求进行Windows身份验证:

Trusted_Connection=True

删除连接字符串的这一部分并再试一次。

错误的原因如下:

IISExpress在登录会话中作为正常进程运行。因此它与您的Windows凭据一起运行。当您的应用程序在IISExpress中运行时,它实际上在您的凭据下运行,当您使用Windows身份验证连接到数据库时,SQL Server将接收您的登录信息。

另一方面,完整的IIS作为不同会话和不同用户帐户下的服务运行。有些应用程序池也可以在另一个帐户下运行。但主要的是那些默认的IIS帐户是本地帐户,所以他们没有"可见性"到另一台电脑。因此,当您的应用程序尝试连接到SQL Server时,SQL"会看到"机器帐户,名称为DOMAIN \ MACHINE $。

答案 1 :(得分:1)

最有可能的是,ASPNETCORE_ENVIRONMENT未在服务器上正确设置(即未设置或未设置为Production)。

在您的服务器上,编辑系统环境变量,并添加一个名称为ASPNETCORE_ENVIRONMENT且值为Production的变量(如果它不存在)。此外,在IIS中为应用程序编辑应用程序池的高级设置,并确保将密钥Load User Profile设置为True