为什么 asp.net core 应用程序在连接到 SQL Server 时使用与 AppPool 身份不同的用户进行 Windows 身份验证?

2024-01-25

我已将 asp.net core 2.2 Web 应用程序作为网站部署到 IIS。我已将应用程序池标识设置为 ApplicationPoolIdentity:

[IIS Screenshol[1]

我理解了System.Security.Principal.WindowsIdentity.GetCurrent() returns

IIS APPPOOL\MyCustomAppPool

但是当我尝试使用连接字符串连接到 SQL Server 时:

Server=localhost;Database=MyDadatabse;Trusted_Connection=True;

我收到以下错误(忽略德语):

SqlException:Fehler bei der Anmeldung für den Benutzer“CompanyDomain\ComputerName$”。

为什么它不使用ApplicationPool标识?

另请注意,当我将自定义用户名/密码设置为应用程序池的身份时,它会起作用。


为了澄清这一点,APPPOOL\MyCustomAppPool,如 LocalServer、NetworkService 和每服务 SID 都是本地身份。它们不存在于域中,因此不能用于访问远程资源。然而服务器itself在域上有一个帐户,并且当在这些身份下运行的代码访问远程资源时,它们使用计算机帐户。

如果 IIS 服务器上有多个应用程序池标识,并且需要区分它们对网络资源的访问,或防止计算机帐户的权限累积,则需要为应用程序池配置域帐户。

如果您使用应用程序池标识连接到本地 SQL Server,错误消息将(令人困惑地)声称您正在使用计算机帐户进行连接。这是SQL Server报告错误的一个缺陷。 EG 如果我尝试从 IIS 应用程序连接到本地 SQL Server,它将失败,并显示:

Login failed for user 'MyDomain\MyServer$'

直到我授予对本地 SQL Server 的访问权限

create login [IIS APPPOOL\DefaultAppPool] from windows
create user [IIS APPPOOL\DefaultAppPool] for login [IIS APPPOOL\DefaultAppPool]
grant select to [IIS APPPOOL\DefaultAppPool]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 asp.net core 应用程序在连接到 SQL Server 时使用与 AppPool 身份不同的用户进行 Windows 身份验证? 的相关文章

随机推荐