【发布时间】:2016-08-26 22:56:24
【问题描述】:
先介绍一下背景。我有一个 ASP.NET 应用程序,它位于我们网络的 DMZ 中。它需要访问位于我们受信任网络中的机器上的 SQL Server 实例。我将调用 Web 服务器 WebServer1 和一个示例 SQL Server SqlServer1。
目前,我们的网络服务器正在使用包含用户 ID 和密码的连接字符串。这并不理想,我们希望使用 Windows 身份验证来连接数据库。
为此,我在我们的域上设置了一个用户帐户和密码,我将其命名为MyDomain\WebApp。我将我们站点的应用程序池的身份设置为这个新帐户,并将站点的匿名身份验证设置为使用应用程序池的身份。
但是,当我尝试更改我们的连接字符串,将 UserID=fakeuser, Password=fakepass 替换为 Trusted_Connection=Yes 时,从 Web 应用程序启动数据库调用会导致错误消息
登录失败。登录来自不受信任的域,不能用于 Windows 身份验证。
编辑:这是来自 SQL Server 错误日志的完整错误消息:
在建立具有集成安全性的连接时,SSPI 握手失败,错误代码为 0x8009030c,状态 14;连接已关闭。原因:AcceptSecurityContext 失败。 Windows 错误代码指示失败的原因。登录尝试失败 [CLIENT: ]
错误:18452,严重性:14,状态:1。
登录失败。登录来自不受信任的域,不能用于 Windows 身份验证。 [客户:]
为了看看发生了什么,我想我应该设置一个简单的页面来告诉我当前用户在工作进程中是什么。这是我遇到非常奇怪的结果的地方。以下是结果及其提供它们的服务器变量(实名替换为上述名称)
- WebServer1\WebApp =
WindowsIdentity.GetCurrent().Name - WebApp =
Environment.UserName - 我的域\WebApp =
pool.ProcessModel.UserName - WebServer1\WebApp =
Request.LogonUserIdentity.Name
1 和 4 很奇怪,在 Web 服务器上不作为用户帐户存在。只有#3 返回在站点的 IIS 应用程序池中看到的正确值。这是使用以下 SO 答案的评论中的方法获得的:https://stackoverflow.com/a/10101417/711674。
我的假设是,当服务器尝试对 SQL Server 实例进行身份验证时,实际使用的不是该帐户,并且正在使用其他值之一,从而导致上述错误消息。
【问题讨论】:
-
检查您的 IIS“匿名身份验证”设置并确保将其设置为“使用应用程序池标识” - IIS 和 ASP.NET 执行身份模拟。
-
您的应用程序使用什么身份验证系统?您是在使用自己的身份验证数据库,还是在使用 Windows 身份验证(在 ASP.NET 中 - 与 SQL Server 无关)?如果是这样,您可能碰壁了:在 Web 应用程序中让 Windows 身份验证与 Impersonation 和 SQL Server 一起工作是很困难的。
-
我们在数据库中使用我们自己的身份验证。我们目前在 web.config 中使用连接字符串并指定用户和密码来连接到数据库,这工作正常。但是,我想使用受信任的连接,而不是连接字符串中没有用户/密码。这很难吗?如果是这样,最安全的选择是什么?感谢您的帮助。
-
另外,作为对您的第一条评论的回应,谢谢您,它确实被设置为错误的用户(这就是管理员用户必须来自的地方)有人一定是这样设置的回到第一次配置的时候。我将相应地编辑我的问题。但是,当从 Web 应用程序进行没有用户/密码的数据库连接时,我仍然收到相同的错误,并且我的问题中的 #4 现在显示“WebServer1\WebApp”
-
应用程序池设置为域用户的全名账户。但是,我开始认为,由于网络配置,我们的 Web 服务器位于 DMZ 上,而我们的 DB 服务器位于受信任的内部网络上,因此该计划可能无法运行。当我设置模拟以使用包含密码的 MyDomain\WebApp 身份
Could not create Windows user token from the credentials specified in the config file. Error from the operating system 'Logon failure: unknown user name or bad password时,我设法在我们的测试站点中导致错误
标签: sql-server iis iis-7.5 sql-server-2014 windows-authentication