2013年10月2日 星期三

[SQl Server] 資料庫異機還原後原帳號無法登入

將資料庫的備份檔案(*.bak)或是透過卸載下來的*.mdf搬移到另一台SQL Server後,透過RESTORE *.bak或是附加*.mdf方式還原資料庫後,當建立一組帳號與原SQL主機上的帳號一樣並賦予權限時會出現如下圖的錯誤訊息
        透過SSMS圖形介面
 
        透過SSMS的新增查詢

       
        碰到此問題時可以透過SSMS連到還原後的資料庫,將結構描述及使用者中相關帳號都刪除後再賦予該帳號權限,但是若該帳號擁有物件的話是無法刪除的,所以又必須先將該帳戶擁有的物件移轉給其他帳號後才能刪除,這樣做還真的很麻煩。
      
        會發生帳號名稱依樣但是就是無法Login的主要原因是,當帳號在建立時系統會產生一組對應的SID,當資料庫還原或是附加後,即便建立一組名稱相同的帳號其SID也不會一樣,所以也是無法使用該資料庫的。

所以過設定SID的方式來解決此問題,其步驟如下
1. 在來源端資料庫主機上先查出該帳號的SID,並把該SID記錄下來
     指令:SELECT sid FROM [資料庫名稱].sys.syslogins WHERE name ='帳號名稱'


2. 到目的端資料庫主機上開啟SSMS查詢視窗後執行以下語法,執行完成後開啟該User屬性視窗的使用者對應,就會發現該有的權限及角色都會自動對應好,而且該帳號也可以順利登入資料庫主機(如下圖)。

 指令:
     USE [master]
     GO
     CREATE LOGIN [ao] WITH PASSWORD = N'ao',
                          DEFAULT_DATABASE = [AOMGR],
                          CHECK_EXPIRATION = OFF,
                          CHECK_POLICY = OFF,
                          SID = 0xECFF96DFC922EC45A164306BC8144CF8
   GO

 
附註:
--查詢整個Instance下所有帳號SID
  SELECT loginname, name, sid, dbname FROM master.sys.syslogins
--查詢某資料庫中所有使用者的SID
  SELECT * FROM [資料庫名稱].sys.sysusers





沒有留言:

張貼留言