什么允许Windows身份验证用户名在两台服务器之间工作(流)?

时间:2009-02-19 17:35:14

标签: sql-server sql-server-2005 authentication impersonation windows-authentication

典型的ISP设置。一台服务器是Web服务器,另一台是DB SQL服务器。在两台机器上都创建了一个本地管理员帐户,比如XYZ。因此,当我远程登录时,我是WebServer \ XYZ或DBServer \ XYZ,具体取决于我登录的位置。

现在,当我使用Windows身份验证登录DBServer上的SQL Server SSMS并执行“S​​ELECT SUSER_NAME()”时,我得到了DBServer \ XYZ。这是有道理的,因为它记录了我使用这些凭据登录的事实。

现在,转到WebServer。我以WebServer \ XYZ远程登录。我在那里安装了SQL客户端组件。当我启动SSMS时,选择DBServer,使用Windows身份验证登录,然后执行“SELECT SUSER_NAME()”,我会以某种方式获得DBSERVER \ XYZ,而不是我认为应该是WebServer \ XYZ。

不知何故,WebServer的XYZ成为DBServer的XYZ。这是为什么?这是怎么发生的?当然,这不仅仅是因为这些名字恰好相同吗?

我听说过受信任的域名,但这两台计算机都不是域控制器,因此我无法访问该信息。如果没有GUI工具,如何判断它是否可信?

我问这个问题的原因是因为,我正在尝试在我的XP笔记本电脑上实现相同的功能(使用Virtual PC),所以我可以模仿生产环境,但我没有运气。

2 个答案:

答案 0 :(得分:3)

XYZ个帐户似乎在两台计算机上都有相同的密码,并且它们不属于域。

WebServer仅发送XYZ作为用户名并成功解答所有密码质询,因为密码确实匹配。

DbServer,当然,从DbServer/XYZ开始就认为你,因为它不知道其他人。

当您尝试通过SMB从另一台独立计算机访问一台独立计算机时,会发生完全相同的事情。如果您的用户名和密码匹配,则表示您已成功。

答案 1 :(得分:3)

机器之间的NTLM挑战有点复杂@Quassnoi表示但它是相似的。这些计算机可能位于同一个域或受信任的域中,但您使用的帐户是本地计算机帐户,仅限于本地计算机的安全访问管理。

作为machinename \ userid格式化的本地SAM帐户是不可传播的。当您尝试使用该帐户对外部资源进行身份验证时,您会遇到一系列协商回退,如下所示:

  1. 传递当前域/用户名/密码哈希令牌 - 它将失败,帐户不受信任
  2. 后备 - 还原UserID +密码的传递哈希
  3. 后备 - 恢复为匿名凭据连接。
  4. 还可以通过配置禁用回退,防止匿名身份验证非常常见。

    正如@Quassnoi所示,在这种情况下,您设法使用#2后备登录。

    要启用帐户凭据传播,您需要满足以下条件:

    1. 机器需要是域之间至少具有单向信任的域(它们不一定必须是同一域的成员)。
    2. 使用域帐户 - 而不是本地计算机帐户 - 看起来像domainname \ userid。一种特殊情况是网络服务帐户,其在域方案中具有代理帐户 - domainname \ machinename $。
    3. 您如何判断您的计算机是否是域的成员?如果你有交互式登录机器,这很容易。有一些策略

      1. 以交互方式,系统控制面板将显示工作组或域成员身份。 (右键单击“开始”菜单中“计算机”上的属性)
      2. 在命令行中,IPCONFIG /ALL还会显示默认的DNS前缀,该前缀通常与您的域名相同。
      3. 我怀疑您的ISP会创建一个域,以便于管理和监控他们的计算机。他们是否允许您创建域帐户是一个不同的问题。