gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:52:38 25 4
gpt4 key购买 nike

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

[ IIS Screenshol[1]

我可以看到 System.Security.Principal.WindowsIdentity.GetCurrent() 返回

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 一样都是本地身份。它们不存在于域中,因此不能用于访问远程资源。然而,服务器本身在域上有一个帐户,当以这些身份运行的代码访问远程资源时,它们使用计算机帐户。

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

如果您使用应用程序池身份连接到本地 SQL Server,错误消息将(令人困惑地)声明您正在使用计算机帐户连接。这是SQL Server 报错方式的一个不足。例如,如果我尝试从 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]

关于sql-server - 为什么 asp.net core 应用程序在连接到 SQL Server 时使用不同于 AppPool 身份的用户进行 Windows 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54348219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com