首页 > 解决方案 > System.Data.SqlClient.SqlException:使用 .NET Core 2.2 应用程序登录用户“”失败

问题描述

我正在尝试通过 IIS 版本 (10.0.14393) 发布我的 .net core 2.2 应用程序。

我已验证身份验证适用于我的帐户/登录,并且连接没有任何数据库问题。当我部署到 IIS 后,我可以进入我的主页,但是当我尝试访问不同的页面时,我得到了这种类型的错误:

SqlException: Login failed for user '{Domain}\{Machine_Name}$'.

我尝试了以下方法,但没有一个被证明可以指导我解决这个问题:

  1. 在我的项目和 IIS 网站上打开 Windows 身份验证并关闭匿名授权。
  2. 在 web config 和 application.json 中包含 windows auth 部分。
  3. 确保推送了正确的 web.config application.json

这可能与我的迁移有关吗?我有三个连接字符串,我的 appsettings.json 文件以这种方式设置:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"}},
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "KitLogContext": "Server={server};Database=DB;user Id=DBAdmin;Password=DB_Password;Trusted_Connection=True;MultipleActiveResultSets=true",
    "PermswageContext": ""Server={server};Database=DB;user Id=DBAdmin;Password=DB_Password;Trusted_Connection=True;MultipleActiveResultSets=true",
    "DATKitsContext": "Server={server};Database=DB;user Id=DBAdmin;Password=DB_Password;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "iisSettings": {
    "windowsAuthentication": true,
    "anonymousAuthentication": false,
    "iisExpress": {
      "applicationUrl": "http://localhost/appname.com",
      "sslPort": 0
    }}}

标签: sql-serverdeploymentasp.net-core-2.0iis-10

解决方案


"KitLogContext": "Server={server};Database=DB;user Id=DBAdmin;Password=DB_Password;Trusted_Connection=True;MultipleActiveResultSets=true",

您正在设置Trusted_Connection=True,但提供一个User_IDand Password。这些是不兼容的连接字符串设置。

Trusted_Connection=False如果您使用 SQL 登录名和密码,请 设置。

否则,将 AppDomain 身份添加为 SQL Server 的登录名。如果 IIS 在 SQL Server 上运行,这将是应用程序池标识。如果 SQL Server 是远程的,这可能是 IIS 服务器的计算机帐户,例如 SomeDomain\ServerName$。例如

use DB
create login [SomeDomain\ServerName$] from windows
create user [SomeDomain\ServerName$] for login [SomeDomain\ServerName$]
alter role AppUserRole add member [SomeDomain\ServerName$]

其中 AppServerRole 是自定义数据库角色,具有运行应用程序代码的最低权限。例如

use DB
create role AppServerRole 
grant select, execute on schema::dbo to AppServerRole

推荐阅读