Entity Framework IIS 服务器上的核心和 Windows 身份验证

Entity Framework Core and Windows authentication on IIS Server

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

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

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

SqlException: Login failed for user 'MyDomain\MyServerName$'

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

更新:

这可能是一个与凭据有关的问题 运行在 IIS 中使用应用程序池,以及这些特定凭据具有的访问权限。你说你没有使用模拟,在这种情况下,需要使用具有适当数据库访问权限的系统帐户从 IIS 上的应用 运行ning 向 SQL 服务器发出请求。系统帐户是单例帐户,仅存在于 运行 作为 IIS 中应用程序的 "Application Pool Identity"。

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

由于您说对 SQL 服务器的请求显示为 DOMAIN\SERVERNAME,您可能需要更改 IIS 中的设置以将请求设置为来自系统帐户,并且然后授予该系统帐户对 SQL 服务器数据库的显式访问权限。

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

然后,将相同的 DOMAIN\USERNAME 帐户作为可以 Read/Write/Delete 等的用户添加到数据库中。您也可以简单地添加请求中被拒绝的 DOMAIN\SERVERNAME此处的数据库,如果您不想使用自定义系统帐户。

至于"How to configure EFCore connection string?",这通常是在Startup.cs文件中完成的。在那里,您可以使用 .UseSqlServer(connectionstring) 方法直接从 appsettings.json 输入连接字符串。

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

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