一个 SQL Server 2014 提供不同的密码哈希

Mar*_*son 4 sql-server sql-server-2014

我一直在使用基于 MicrosoftEXEC sp_help_revlogin脚本的脚本来同步主机之间的 SQL Server 用户名和密码。这在 SQL Server 2008 R2 上已经运行了很长时间,但是随着我们计划迁移到 SQL Server 2014,我遇到了一个障碍。

我有三台暂存 SQL Server 2014 机器。在所有服务器上,我运行以下命令:

CREATE LOGIN [TestAccount] 
WITH PASSWORD = N'1234567890', 
     DEFAULT_DATABASE = [master], 
     CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF
Run Code Online (Sandbox Code Playgroud)

对于其中两个,我得到一个生成的“创建”命令:

CREATE LOGIN [TestAccount] 
WITH PASSWORD = 0x010075DDCA54FCEF12CB11C4E64040E877B9FF5872C41EB98095 HASHED, 
     SID = 0xCA78345104805C4E89004969D05D551B, 
     DEFAULT_DATABASE = [master], 
     CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF
Run Code Online (Sandbox Code Playgroud)

凉爽的。到现在为止还挺好。但是,在第三台服务器上,我收到了一个“创建”命令:

CREATE LOGIN [TestAccount] 
WITH PASSWORD = 0x02002F6CB52E7F571AD422689021EB9EC1BE2AB4576AE6EC12485333A4CB892A9197B440E1471376A5AAC5160847F636A637D1F499880D7653ABC4DB4714746856E01DE41E09 HASHED, 
     SID = 0x19337EA32254A64F8FC018474B58DBA5, 
     DEFAULT_DATABASE = [master], 
     CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF
Run Code Online (Sandbox Code Playgroud)

哪个不起作用。哈希太大了。

是否有一些兼容性级别标志或我以某种方式在这台生成老式密码哈希的服务器上打开的东西?


给瑞恩打勾,因为他是对的。我实际上连接到安装在与 SQL Server 2014 实例相同的物理机器上的错误实例。星期五晚上我很累。

Rea*_*ces 8

这是因为自 SQL Server 2012 以来,哈希算法发生了变化。

从这个版本开始,哈希值是原来的两倍。
您可以在sp_help_revlogin microsoft 文章中的备注下阅读用于各种版本 SQL Server 的三个哈希版本:

可以通过三种方式对密码进行散列:
VERSION_LEGACY:此散列是 SQL Server 2000 之前的 16 字节散列。
VERSION_SHA1:此哈希是使用 SHA1 算法生成的,在 SQL Server 2000 到 SQL Server 2008 R2 中使用。
VERSION_SHA2:此哈希是使用 SHA2 512 算法生成的,用于 SQL Server 2012。

这意味着如果要将 SQL Server 2012 或更高版本的用户移动到 2008r2 实例,则需要找到不同的方法。


我现在测试了很多。使用密码哈希移动到新版本服务器 (2012+) 时,任何在 SHA1 下创建的用户都可以移回,只要密码未更改。但是,在 2012+ 中创建的任何新用户将无法移动到 2008r2 或之前版本。