【问题标题】:Entity Framework Core and Windows authentication on IIS ServerIIS 服务器上的 Entity Framework Core 和 Windows 身份验证
【发布时间】:2020-04-21 11:00:04
【问题描述】:

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

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

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

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

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

更新:

  • 我无法使用表单身份验证
  • 我没有用户列表
  • 我可以使用模拟(WinAuth?活动目录?)
  • 每一个用户(能登录网站的用户都可以访问sql数据库
  • 我可以更改一些 IIS 服务器设置
  • 这是我第一次使用 winAuth(由 Visual Studio 创建项目工具自动配置 => 使用 Windows 身份验证)
  • “应用程序池在什么样的用户下运行?”我不知道,我认为是默认的

【问题讨论】:

标签: c# entity-framework asp.net-core iis windows-authentication


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

  • 为您更新的问题
  • 更新了我的答案,请查看。
  • 好的,我有一个问题要问你。我编辑 iis 系统帐户 => 我输入我的帐户,因为我无法“快速编辑”数据库。在线它可以使用我的 AD 帐户,如果我使用另一个 AD 帐户登录它可以工作吗?还是只使用我的帐户?
  • 它适用于任何有权访问数据库的 AD 帐户。请将我的答案标记为已接受并投票:)
猜你喜欢
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多