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

时间:2019-01-24 13:51:44

标签: sql-server iis asp.net-core windows-authentication

我已经将asp.net core 2.2 Web应用程序部署为IIS的WebSite。我已将应用程序池标识设置为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 Anmeldungfürden Benutzer“ CompanyDomain \ ComputerName $”。

为什么不使用ApplicationPool身份?

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

1 个答案:

答案 0 :(得分:0)

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

如果您在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]