首页 > 解决方案 > IIS 服务器上的 Entity Framework Core 和 Windows 身份验证

问题描述

我第一次尝试在我的 ASP.NET Core 3.1 MVC 站点上使用 Windows 身份验证来使用 EF Core 连接到 SQL Server。

本地一切正常(使用 IIS Express),但在服务器上,出现问题。

我的网站"hi,<myDomain/myAccount>!"在页面的右上角,它是正确的,但是当我请求一个带有数据库查询的页面时,我收到了这个错误:

SqlException:用户“MyDomain\MyServerName$”登录失败

为什么?如何配置 EF Core 连接字符串?

更新:

标签: c#entity-frameworkasp.net-coreiiswindows-authentication

解决方案


这可能与在 IIS 中运行应用程序池的凭据以及这些特定凭据具有的访问权限有关。您说您没有使用模拟,在这种情况下,从您在 IIS 上运行的应用程序对 SQL Server 的请求需要使用具有适当数据库访问权限的系统帐户进行​​。系统帐户是一个单例帐户,仅作为 IIS 中应用程序的“应用程序池标识”而存在。

在您服务器上的 IIS 上,应用程序池在什么样的用户下运行?在大多数情况下,使用 Windows 身份验证时,您希望使用某种系统帐户来运行应用程序池,然后授予该系统帐户访问数据库的权限。如果您不想使用系统帐户,则必须使用模拟,然后使用 AD 组授予模拟用户访问 SQL Server 数据库的权限。

由于您说对 SQL Server 的请求以 DOMAIN\SERVERNAME 的形式出现,因此您可能需要在 IIS 中更改该设置以将请求设置为来自系统帐户,然后为该系统帐户提供对 SQL Server 的显式访问权限数据库。

您可以通过调整 IIS 中的高级设置并输入要在 IIS 中运行应用程序或“as”的帐户的信息(用户名/密码)来更改此设置。

在此处输入图像描述

在此处输入图像描述

然后,将这个相同的 DOMAIN\USERNAME 帐户添加到数据库作为可以读/写/删除等的用户。如果你不这样做,你也可以简单地将在它的请求中被拒绝的 DOMAIN\SERVERNAME 添加到数据库想使用自定义系统帐户。

在此处输入图像描述

至于“如何配置 EFCore 连接字符串?”,通常在 Startup.cs 文件中完成。.UseSqlServer(connectionstring)在那里,您可以使用该方法直接从您的 appsettings.json 输入连接字符串。

您使用 访问连接字符串Configuration.GetConnectionString("KEY")

在那里配置后,您无需再次配置它(除非可能从 dev/qa/prod 环境更改)。

在此处输入图像描述

在此处输入图像描述


推荐阅读