Sql server 哪个用户用于到SQL Server的受信任连接-IIS/ASP.NET
先来点背景知识。我有一个ASP.NET应用程序,它位于我们网络上的DMZ中。它需要访问位于受信任网络中的计算机上的SQL Server实例。我将调用web服务器Sql server 哪个用户用于到SQL Server的受信任连接-IIS/ASP.NET,sql-server,iis,iis-7.5,sql-server-2014,windows-authentication,Sql Server,Iis,Iis 7.5,Sql Server 2014,Windows Authentication,先来点背景知识。我有一个ASP.NET应用程序,它位于我们网络上的DMZ中。它需要访问位于受信任网络中的计算机上的SQL Server实例。我将调用web服务器WebServer1和示例SQLServerSqlServer1 目前,我们的web服务器正在使用包含用户ID和密码的连接字符串。这并不理想,我们希望使用Windows身份验证来连接数据库 为此,我在我们的域上设置了一个用户帐户和密码,我将其称为MyDomain\WebApp。我将站点的应用程序池的标识设置为此新帐户,并将站点的匿名身份验
WebServer1
和示例SQLServerSqlServer1
目前,我们的web服务器正在使用包含用户ID和密码的连接字符串。这并不理想,我们希望使用Windows身份验证来连接数据库
为此,我在我们的域上设置了一个用户帐户和密码,我将其称为MyDomain\WebApp
。我将站点的应用程序池的标识设置为此新帐户,并将站点的匿名身份验证设置为使用应用程序池的标识
但是,当我尝试更改连接字符串时,将UserID=fakeuser,Password=fakepass
替换为Trusted\u connection=Yes
,从web应用程序启动数据库调用会导致错误消息
登录失败。登录名来自不受信任的域,不能与Windows身份验证一起使用
编辑:以下是SQL Server错误日志中的完整错误消息:
建立集成安全连接时,SSPI握手失败,错误代码为0x8009030c,状态14;连接已关闭。原因:AcceptSecurityContext失败。Windows错误代码指示故障原因。登录尝试失败[客户端:]
错误:18452,严重性:14,状态:1
登录失败。登录名来自不受信任的域,不能与Windows身份验证一起使用。[客户:]
为了了解发生了什么,我想我应该设置一个简单的页面,告诉我当前用户在worker进程上是什么。这就是我遇到非常奇怪结果的地方。以下是结果及其提供给它们的服务器变量(用上面提到的名称替换实名)
WindowsIdentity.GetCurrent().Name
Environment.UserName
pool.ProcessModel.UserName
Request.LogonUserIdentity.Name
我的假设是,当服务器尝试使用SQL server实例进行身份验证时,实际使用的不是帐户,并且正在使用其他值之一,导致出现上述错误消息。有一篇关于此问题的好文章。简言之: 您需要回答两个主要问题:
FastCGI
模块的模拟是打开的
还是关闭的?(即,我的php.ini
文件中的fastcgi.impersonate
设置是否设置为0
或
1
?)fastcgi.impersonate=1
:
因为我是匿名连接到IIS的,所以内置的匿名
帐户(在IIS 7.0中默认为NT AUTHORITY\IUSER
)为
冒充的。因此,我的连接尝试失败,因为此标识
未映射到我的服务器上的有效登录名
B.IIS匿名身份验证已启用且fastcgi.impersonate=0
:
因为模拟已关闭,所以我的身份未被用作
PHP进程的标识。而是PHP的实际标识
连接尝试中使用了进程。在IIS 7.5中,标识
PHP进程的性能取决于应用程序池的标识
他正在跑步。在本例中,PHP位于默认应用程序池中
并且连接尝试中使用的标识是IIS APPPOOL\DefaultAppPool
(因此我的连接尝试失败)
C.IIS Windows身份验证已启用且fastcgi.impersonate=1
:
启用Windows身份验证(和匿名身份验证)
已禁用),我使用Web浏览器提供的标识连接到IIS
正在(Microsoft\brian.swan
)下运行,该身份是我登录的
与)。并且,在启用模拟的情况下,PHP进程在
Microsoft\brian.swan
identity。既然这个身份映射到了
在我的服务器上有效登录,我的连接尝试成功
D.IIS Windows身份验证已启用且fastcgi.impersonate=0
:
这里的结果与匿名身份验证的结果相同
已启用且fastcgi.impersonate=
0(连接尝试失败)。
唯一的区别是当我从网上请求页面时
服务器:当我请求时,一个弹出窗口询问我的身份
页面
E.同时启用匿名和Windows身份验证:
Web浏览器将尝试使用匿名访问Web服务器
首先是身份验证。因此,如果同时使用匿名和Windows身份验证
如果两者都已启用,则结果将与上面的结果相同,其中
已启用匿名身份验证(A和B)
检查您的IIS“匿名身份验证”设置,并确保它设置为“使用应用程序池标识”-IIS和ASP.NET进行身份模拟。您的应用程序使用什么身份验证系统?您是使用自己的身份验证数据库,还是使用Windows身份验证(在ASP.NET中-与SQL Server无关)?如果是这样,您可能遇到了一个难题:让web应用程序中的Windows身份验证