none
資料庫還原時, Login User 的 Mapping 會被移除 RRS feed

  • 問題

  • 各位好:  (SQL 2005 Developer Editor on Windows XP)

    小弟建立了一個新 DB 於內,簡稱 test 好了。

    再建立一個 Login User : tester, 設定如下:

    default database: test

    server roles: public

    user mapping to: test

    其他都使用預設值,然後去 test 的 security -> users 裡面,把 tester 設定成

    schemas owner by this user: <沒設定>

    database role membership: db_owner

     

    DB 還原使用 file 還原整個資料庫,選項:

    Overwrite the existing database

    Leave the database ready to use by rolling back uncommitted transactions.

     

    還原以後,Login User 裡面的 user mapping 就會不見了。

     

    我們公司裡面另外的 SQL 2000,我使用同樣的方式,卻不會消失。不同點在於,SQL 2000 的那個 Login user 的 default database 是 pubs. 問題是 2005 裡面沒有 pubs, 設定給其他的 db 也很奇怪.

    請問這要如何解決? 還是沒辦法, 一定要重新建立 mapping ?

     

    2007年6月13日 上午 08:21

解答

  • Bak檔案還原時,若您產生Bak的那台伺服器跟您還原的那台不是同一台SQL Server時。若還原在同一台SQL Server時則不會發生

    由於帳號的sid[帳號安全性]不同,因此會要求您重新定義。我之前的做法給您參考看看。

     

    SQL2000

    1.使用 SQL Server Enterprise Manager點至您還原的DB上,在使用者那邊將您失去登入名稱的使用者移除,再至安全性 登入那邊重新定義該使用者對該DB的權限。

    2.使用 SQL Server Enterprise Manager將還原好的DB卸離再掛載,掛載時會請您重新把指定db_owner跟分配權限。

     

    這是目前我的經驗,若有錯誤也請前輩指導。

     

    2007年6月20日 上午 04:34
  • 資料庫還原後一定要重建 mapping.

    可以參考 sp_chang_users_login 預存程序。

    2007年6月21日 上午 10:02
    版主

所有回覆

  • Bak檔案還原時,若您產生Bak的那台伺服器跟您還原的那台不是同一台SQL Server時。若還原在同一台SQL Server時則不會發生

    由於帳號的sid[帳號安全性]不同,因此會要求您重新定義。我之前的做法給您參考看看。

     

    SQL2000

    1.使用 SQL Server Enterprise Manager點至您還原的DB上,在使用者那邊將您失去登入名稱的使用者移除,再至安全性 登入那邊重新定義該使用者對該DB的權限。

    2.使用 SQL Server Enterprise Manager將還原好的DB卸離再掛載,掛載時會請您重新把指定db_owner跟分配權限。

     

    這是目前我的經驗,若有錯誤也請前輩指導。

     

    2007年6月20日 上午 04:34
  • 資料庫還原後一定要重建 mapping.

    可以參考 sp_chang_users_login 預存程序。

    2007年6月21日 上午 10:02
    版主
  • 您好:

    果然如您所說,不同電腦的 bak 還原的話 User Mapping 會被移除,要重設定,但同一台電腦所做的 bak,就沒這個問題。

    因為之前都是把 bak 搬來搬去,所以沒注意到... Sorry。

    另外,您所說的 sp_change_users_login 預存程序... 呃,看了 help 還不是很懂。我再研究看看。

    謝謝您。

    2007年6月26日 上午 02:35
  • sp_change_users_login 'UPDATE_ONE', 'database_exist_login_name', 'new_login_name'

     

    通常都 database_exist_login_name 和 new_login_name 相同時,二個就填一樣的就好了。

    2007年6月26日 上午 03:52
    版主