[MSSQL] 重建密碼一樣的帳號

因為SQL Server 2005即將結束服務(EOS),所以公司內有一些比較重要的系統就有考慮要進行升級或移轉服務,

User也希望經過測試再進行正式的服務移轉,因此通常會另外安裝新機,而不會原機升級,

在資料庫中可能有不少的系統帳號需要移轉,就可以透過以下方法來進行...

要還原帳號,不外乎是還原原先的權限以及建立一樣的密碼,

通常帳號在幫User建立,密碼交出去之後應該也忘光了(有建立密碼原則的例外),

如果帳號不多,花點時間一個一個跟User要也是一種方法,但如果數量超過5個,我想一般人也懶得問了,

當然如果一切能透過Script完成是最好的,但想也知道,密碼怎麼可能用明碼的方式存在呢...

 

透過以下的語法可以查到目前這個資料庫中以哪些帳號以及密碼,

SELECT name, password
FROM syslogins
WHERE password IS NOT NULL
ORDER BY name

從查到的資訊來看,還真的是亂碼...

如果把帳號用script匯出,密碼的欄位一樣是看不懂的,

當然,這個語法還是可以拿來建帳號,但使用記得的密碼拿來登入,會取得密碼錯誤的訊息,

怎麼辦呢??

 

查看MSDN中CREATE LOGIN的語法,有一個option叫HASHED,表示我們可以透過HASH過的密碼來建立帳號,

<option_list1> ::= 
    PASSWORD = { 'password' | hashed_password HASHED } [ MUST_CHANGE ]
    [ , <option_list2> [ ,... ] ]

透過底下的語法,我們可以取得被加密的字串,

SELECT name, LOGINPROPERTY(name, 'PasswordHash' ) hash
FROM syslogins
WHERE password IS NOT NULL
ORDER BY name

就可以改用以下的語法把帳號建回去了,

CREATE LOGIN TEST WITH PASSWORD = 0x0200FD89B0E958361F2D8DD16B05317E55BFA602014F7D334D1BB605A9F722A71A9FBAC9A7AE132F1DC161267CFE87EF276B76EC15A00CADF9626021E39462CAA02716DFAFE5 HASHED;

接著透過匯出的權限語法或是sp_change_users_logi這個procedure,一一把權限建立或連結回去就好。

 

參考文件:

CREATE LOGIN (Transact-SQL)