为什么 asp.net 核心应用在连接到 SQL 服务器时使用不同于 AppPool 身份的用户进行 Windows 身份验证?
Why asp.net core app uses different user than AppPool identity for Windows Authentication when connecting to SQL Server?
我已将 asp.net 核心 2.2 Web 应用程序作为网站部署到 IIS。我已将应用程序池标识设置为 ApplicationPoolIdentity:
[
我可以看到 System.Security.Principal.WindowsIdentity.GetCurrent()
returns
IIS APPPOOL\MyCustomAppPool
但是当我尝试使用连接字符串连接到 SQL 服务器时:
Server=localhost;Database=MyDadatabse;Trusted_Connection=True;
我收到以下错误(忽略德语):
SqlException: Fehler bei der Anmeldung für den Benutzer "CompanyDomain\ComputerName$".
为什么不使用 ApplicationPool 标识?
另请注意,当我将自定义 username/password 设置为应用程序池的标识时,它起作用了。
为了澄清这一点,APPPOOL\MyCustomAppPool
,像 LocalServer、NetworkService 和每个服务的 SID 都是本地标识。它们不存在于域中,因此不能用于访问远程资源。但是服务器本身在域上有一个帐户,当这些身份下的代码运行访问远程资源时,他们使用计算机帐户。
如果您在 IIS 服务器上有多个应用程序池身份,并且需要区分它们对网络资源的访问权限,或者防止计算机帐户的权限累积,您将需要为应用程序池提供域帐户。
如果您使用应用程序池标识连接到本地 SQL 服务器,则错误消息将(令人困惑地)声明您正在使用计算机帐户连接。这是SQL服务器报错的不足。例如,如果我尝试从 IIS 应用程序连接到我的本地 SQL 服务器,它将失败,
Login failed for user 'MyDomain\MyServer$'
直到我授予访问本地 SQL 服务器的权限
create login [IIS APPPOOL\DefaultAppPool] from windows
create user [IIS APPPOOL\DefaultAppPool] for login [IIS APPPOOL\DefaultAppPool]
grant select to [IIS APPPOOL\DefaultAppPool]
我已将 asp.net 核心 2.2 Web 应用程序作为网站部署到 IIS。我已将应用程序池标识设置为 ApplicationPoolIdentity:
[
我可以看到 System.Security.Principal.WindowsIdentity.GetCurrent()
returns
IIS APPPOOL\MyCustomAppPool
但是当我尝试使用连接字符串连接到 SQL 服务器时:
Server=localhost;Database=MyDadatabse;Trusted_Connection=True;
我收到以下错误(忽略德语):
SqlException: Fehler bei der Anmeldung für den Benutzer "CompanyDomain\ComputerName$".
为什么不使用 ApplicationPool 标识?
另请注意,当我将自定义 username/password 设置为应用程序池的标识时,它起作用了。
为了澄清这一点,APPPOOL\MyCustomAppPool
,像 LocalServer、NetworkService 和每个服务的 SID 都是本地标识。它们不存在于域中,因此不能用于访问远程资源。但是服务器本身在域上有一个帐户,当这些身份下的代码运行访问远程资源时,他们使用计算机帐户。
如果您在 IIS 服务器上有多个应用程序池身份,并且需要区分它们对网络资源的访问权限,或者防止计算机帐户的权限累积,您将需要为应用程序池提供域帐户。
如果您使用应用程序池标识连接到本地 SQL 服务器,则错误消息将(令人困惑地)声明您正在使用计算机帐户连接。这是SQL服务器报错的不足。例如,如果我尝试从 IIS 应用程序连接到我的本地 SQL 服务器,它将失败,
Login failed for user 'MyDomain\MyServer$'
直到我授予访问本地 SQL 服务器的权限
create login [IIS APPPOOL\DefaultAppPool] from windows
create user [IIS APPPOOL\DefaultAppPool] for login [IIS APPPOOL\DefaultAppPool]
grant select to [IIS APPPOOL\DefaultAppPool]