Kur*_*rut 1 password sql-server sql-server-2008
我目前正在将一些服务器从 MS sql server 2000 迁移到 2008。一些遗留应用程序通过基本上检查服务器上是否存在具有该名称和密码的用户来进行密码保护。
每个应用程序在将密码发送到服务器之前都会将密码转换为大写,但是是的,您猜对了,服务器上的密码不一定以大写形式存储:这在 2000 年不是问题,但在 2008 年是(正确的! )。
这些应用程序没有任何允许用户更改密码的巧妙功能,我不想要求每个用户更改密码或更改应用程序,因此我想知道是否可以使用脚本将所有用户密码更改为 upper 以及如何创建它(要修改的表,如何修改散列字段等)?
您确实可以从 sql server 2000 编写密码脚本并将它们导入 sql server 2008,以便将它们识别为大写密码。这是一些有助于理解 sql server 密码哈希的背景阅读材料,因此您可以跟随示例进行操作。
SQL Server 2000 的密码实际上是不区分大小写的,如这篇文章中所述。 即便如此,sql server 哈希存储密码的区分大小写和不区分大小写的副本,因此当您将密码哈希迁移到 sql server 2005/2008 时,您的密码将区分大小写。
要对此进行测试,您可以在 SQL Server 2000 Server 上运行以下命令:
exec sp_addlogin @loginame= 'usera' , @passwd='password'
Run Code Online (Sandbox Code Playgroud)
作为 usera 登录到 SQL Server 2000 使用 'PASSWORD' ,即使它不应该。要将 usera 迁移到 SQL Server 2005/2008,我们可以使用以下内容复制登录名并保留 sid 和密码哈希:
select
'exec sp_addlogin @loginame ='''
+ [name] + ''''
+ ', @passwd= '
+ master.dbo.fn_varbintohexstr([password])
+ ', @sid= '
+ master.dbo.fn_varbintohexstr([sid])
+ ', @encryptopt = ''skip_encryption_old'''
from sysxlogins where name='usera'
Run Code Online (Sandbox Code Playgroud)
您将获得以下输出(当然具有不同的 sid 和 hash):
exec sp_addlogin @loginame ='usera',
@passwd= 0x01004409eb54922c0cd2bedbad754f37afad4053bdadf719ff80c8a8abf5801b813114be6ba0c2c8543b2db77b33,
@sid= 0x06cf56eb108a12428712f8b7c66ca1cd, @encryptopt = 'skip_encryption_old'
Run Code Online (Sandbox Code Playgroud)
您可以做的是在将密码哈希导入 2008 之前对其执行一些“处理”,以便第二个大写哈希覆盖区分大小写的哈希。这意味着您的所有密码都是大写的。使用上面的密码,你可以执行以下操作,我在t-sql中已经完成了:
declare @old_passwd char(94) -- original hash from sql server 2000
declare @new_passwd char(94) -- new upper case password for sql server 2008
declare @cs_hash char(40) -- case sentive part
declare @ci_hash char(40) -- case insentive part
declare @salt char(14)
set @old_passwd = '0x01004409EB54922C0CD2BEDBAD754F37AFAD4053BDADF719FF80C8A8ABF5801B813114BE6BA0C2C8543B2DB77B33'
set @salt = SUBSTRING(@old_passwd,1,14)
set @cs_hash = SUBSTRING(@old_passwd,15,40) -- not used, but here for understanding
set @ci_hash = SUBSTRING(@old_passwd,55,40)
set @new_passwd = @salt + @ci_hash + @ci_hash
SELECT @new_passwd
Run Code Online (Sandbox Code Playgroud)
将此@new_password 用作sp_addlogin 的@passwd 参数将意味着密码被识别为大写!
| 归档时间: |
|
| 查看次数: |
1782 次 |
| 最近记录: |