“使用登录名的当前安全上下文进行”如何将用户密码传递给远程服务器

Hea*_*ore 7 sql-server-2008 security sql-server linked-server

假设您有一个带有“链接服务器”的 SQL Server 到另一台服务器 - 所说的“链接服务器”设置为使用“使用登录的当前安全上下文进行”作为其身份验证模型。

当所有服务器都拥有一个哈希时,SQL Server 如何向其他服务器提供正确的密码(在处理非 W​​indows 凭据时)。

我之前已经将登录名从服务器传输到服务器,我知道哈希值单独存储在 SQL 中,并且在使用密码创建登录名时,这通常显示为十六进制值,例如:

create login test with password = '0x22A9AE652CFC38938D56A9C3872B266B192D16E4' hashed
Run Code Online (Sandbox Code Playgroud)

如果 SQL 只有一个可用的散列 - 它可以使用散列登录到远程服务器吗?或者原始(未散列的)密码是否在整个连接期间都保存在用户的会话/内存中,然后 SQL 可以检索并传递到远程服务器进行登录?

如果服务器可以使用哈希而不是密码登录 - 这可以在正常登录中完成还是纯粹是链接服务器的内部功能?

纯粹是一个好奇的问题——喜欢了解这些东西是如何运作的。

Hea*_*ore 5

在与 Microsoft 就另一个问题(付费支持请求)联络时,我碰巧向他们询问了这一点,他们确认未散列的密码已传递到远程服务器,但 SQL 引擎执行此操作的机制是“隐藏的,无法捕获” - 但可以说,登录不是使用哈希完成的。

这是完整的回复:

当所有服务器都有一个哈希时,SQL Server 如何向另一台服务器提供正确的密码(在处理非 W​​indows 凭据时)?

:如果使用 SQL Server 身份验证连接到本地服务器,登录名和密码将用于连接到远程服务器。在这种情况下,远程服务器上必须存在具有完全相同名称和密码的登录名。

使用登录的当前安全上下文进行

指定将使用登录的当前安全上下文为列表中未定义的登录建立连接。如果使用 Windows 身份验证连接到本地服务器,您的 Windows 凭据将用于连接到远程服务器。如果使用 SQL Server 身份验证连接到本地服务器,登录名和密码将用于连接到远程服务器。在这种情况下,远程服务器上必须存在具有完全相同名称和密码的登录名。

当所有服务器都有一个哈希时,SQL Server 如何向另一台服务器提供正确的密码(在处理非 W​​indows 凭据时)?

:登录名和密码被传递到远程服务器,这个机制/任务由隐藏且无法捕获的 SQL 引擎处理。

如果 SQL 只有一个可用的散列 - 它可以使用散列登录到远程服务器吗?或者原始(未散列的)密码是否在整个连接期间都保存在用户的会话/内存中,然后 SQL 可以检索并传递到远程服务器进行登录?如果服务器可以使用哈希而不是密码登录 - 这可以在正常登录中完成还是纯粹是链接服务器的内部功能?

:HASH 不能用于登录 SQL 服务器,SQL 引擎负责处理登录过程,我们没有太多关于此的文档。