[SQL SERVER][SSIS]傳送登入工作

[SQL SERVER][SSIS]傳送登入工作

我相信大家都有轉換、升級資料庫的經驗,

當轉換或平行升級資料庫到另一新SQL Instance後,

來源資料庫使用者會因為SID不正確對應而形成孤兒使用者,

而解決孤兒使用者的方法很多([SQL SERVER][TS]無法以資料庫主體錯誤訊息),

但現在我幾乎都使用SSIS來處理這樣的小問題。

 

來源資料庫使用以下語法確認是否有孤兒使用者

use
test1
go
EXEC sp_change_users_login @Action='Report'; 
image 
沒有任何孤兒使用者。
以後版本 sp_change_users_log 可能會被移除,
請使用 sys.database_principals 來取得。
SELECT name,sid
FROM sys.database_principals  
WHERE (sid is not null and sid <> 0x0)
and (len(sid) <= 16)
and suser_sname(sid) is null 

image 

沒有任何孤兒使用者。

 

我將來源資料庫轉移到新SQL Instance後,隨即產生孤兒使用者

use test1
go
SELECT name,sid
FROM sys.database_principals  
WHERE (sid is not null and sid <> 0x0)
and (len(sid) <= 16)
and suser_sname(sid) is null  

image

 

接下來我使用SSIS中的傳送登入工作來解決目的資料庫的孤兒使用者

image

image

記得複製SID並覆蓋。

 

編輯執行SQL工作

image

針對目的資料修改登入密碼並啟用。

 

image

執行成功。

 

 

如果你和我一樣很懶的話,可以一起傳送登入和資料庫

image

如果登入預設對應 master 的話,請先執行傳送登入,

如不是請先執行傳送資料庫後再執行傳送登入工作。

 

編輯傳送資料庫工作

image

選擇Cpoy動作。

 

 

參考

孤兒使用者疑難排解