要將正式機的資料倒到測試機作為測試資料使用
並使用備份還原的方式
還原後發現測試機的db帳號登入後無權限使用此db
舉例來說
在正式機的 SQL Server 有個 accout_test 帳號,且此帳號有 XXDB 的存取權限
測試機 SQL Server 一樣也有個 accout_test 帳號
db還原後,直覺上測試機的 accout_test 應該會有 XXDB 的存取權限
但實際上會出現錯誤 "伺服器主體 "accout_test" 在目前的安全性內容下無法存取資料庫 "Northwind"。"
當時應急是先將 XXDB 上的登入移除此帳號,再重新加帳號的存取權限,發現這樣子就可以!
但如果帳號的數量一多,也需要花費不少功夫才能將所有帳號的權限重建回來
後來想到這個問題再回去找資料的時候
發現原來是因為在建立一個 User 時 SQL Server 會建立新的 SID (安全性識別碼)
當登入時,SQL Server 會去比對帳號的 SID,若一致才允許登入
所以每個 SQL Server 即使建立同名稱的帳號,SID 也是不同的
而還原到新 Server 的 DB 他的登入 User SID 仍然還是舊 Server 的 SID,並不會因為還原到新 SQL Server 上時 SID 就有所不同,如果真的這樣的話可能會照成世界大亂! Xd
Auto_Fix:主要是若有相同名稱的帳號就可以自動修復
Update_One:則必須指定對應的帳號名稱