SQL Server 資料庫遷移孤立使用者的解決方法

2022-04-02 05:22:44 字數 2993 閱讀 1288

如果用附加或者恢復備份的方法把資料庫從乙個電腦移動到另外乙個電腦,資料庫的使用者和sql的登入會衝突,登入沒有辦法和使用者關聯,造成孤立使用者.

為了解決這個問題,首先在目標sql系統上建立與使用者同名的登入,然後在資料庫上執行下面指令把使用者和登入關聯

use 資料庫

sp_change_users_login 'update_one', 'my_dbuser', 'my_sqllogin'

(資料庫使用者my_dbuser 和 "sql server登陸名"my_sqllogin 關聯)

如果資料庫預先設定了大量的使用者許可權,可以用這個方法方便的移動到新伺服器上

更詳細的用法,請看sql的幫助:

將現有資料庫使用者對映到 sql server 登入名。

注意:sp_change_users_login 不能用於 windows 登入名。

transact-sql 語法約定

語法sp_change_users_login [ @action = ] 'action'

[ , [ @usernamepattern = ] 'user' ]

[ , [ @loginname = ] 'login' ]

[ , [ @password = ] 'password' ]

備註注意:

sp_change_users_login 不能用於將資料庫使用者對映到 windows 級主體、證書或非對稱金鑰。

使用 sp_change_users_login 將當前資料庫中的資料庫使用者鏈結到 sql server 登入名。如果使用者登入名已更改,則使用 sp_change_users_login 將使用者鏈結到新的登入,而不會丟失使用者的許可權。新的 login 不能為 sa,而 user 不能為 dbo、guest 或 information_schema 使用者。

不能在使用者定義的事務中執行 sp_change_users_login。

引數[ @action = ] 'action'

說明過程要執行的操作。action 的資料型別為 varchar(10)。action 可具有下列值之一。

值  說明

auto_fix

將當前資料庫的 sysusers 表中的使用者條目鏈結到同名的 sql server 登入名。如果不存在同名的登入名,將會建立乙個。檢查 auto_fix 語句的結果,確認實際鏈結是否正確。在對安全性較為敏感的情況下,要避免使用 auto_fix。

如果使用 auto_fix 時登入名尚不存在,則必須指定 user 和 password,否則必須指定 user,但 password 將被忽略。login 必須為 null。user 必須是當前資料庫中的有效使用者。不能將另乙個使用者對映到該登入名。

report

列出當前資料庫中未鏈結到任何登入名的使用者以及相應的安全識別符號 (sid)。user、login 和 password 必須為 null 或不指定。

update_one

將當前資料庫中的指定 user 鏈結到現有 sql server login。必須指定 user 和 login。password 必須為 null 或不指定。

[ @usernamepattern = ] 'user'

當前資料庫中的使用者名稱。user 的資料型別為 sysname,預設值為 null。

[ @loginname = ] 'login'

sql server 登入的名稱。login 的資料型別為 sysname,預設值為 null。

[ @password = ] 'password'

通過指定 auto_fix 建立的新 sql server 登入名分配的密碼。如果已存在匹配的登入名,則對映該使用者名稱與登入名且忽略 password。如果不存在匹配的登入名,則 sp_change_users_login 建立新的 sql server 登入名並分配 password 作為新登入名的密碼。password 的資料型別為 sysname,且不能為 null。

安全性 注意:

建議使用強密碼。有關詳細資訊,請參閱強密碼。

返回**值

0(成功)或 1(失敗)

結果集列名  資料型別  說明

username

sysname

資料庫使用者名稱。

usersid

varbinary(85)

使用者的安全識別符號。

許可權需要 db_owner 固定資料庫角色的成員身份。只有 sysadmin 固定伺服器角色的成員才能指定 auto_fix 選項。

示例a. 顯示登入對映的當前使用者的報告

以下示例生成當前資料庫中的使用者及其安全識別符號 (sid) 的報告。

複製**

exec sp_change_users_login 'report';

b. 將資料庫使用者對映到新的 sql server 登入名

在以下示例中,資料庫使用者與新的 sql server 登入名關聯。資料庫使用者 mb-sales 首先對映到另乙個登入名,然後重新對映到登入名 maryb。

複製**

--create the new login.

create login maryb with password = '982734snfdhhkjj3';

go--map database user mb-sales to login maryb.

use adventureworks;

goexec sp_change_users_login 'update_one', 'mb-sales', 'maryb';

goc. 自動將使用者對映到登入名(必要時新建乙個登入名)

以下示例顯示如何使用 auto_fix 將現有使用者對映到同名的登入名,以及如何在不存在登入名 mary 的情況下,建立密碼為 b3r12-3x$098f6 的 sql server 登入名 mary。

複製**

use adventureworks;

goexec sp_change_users_login 'auto_fix', 'mary', null, 'b3r12-3x$098f6';

go

sqlserver 資料庫遷移

客戶環境是系統a的1.0版本,開發環境是系統a的2.0版本。2.0版本對於資料庫有部分變更 主要是新增表和字段,不涉及字段刪除和變更 這個時候需要在客戶環境安裝資料庫2.0 表結構 儲存過程都是用的2.0 但是資料要把1.0的同步過來。右擊2.0版本的資料庫,選擇 任務 生成指令碼 選擇要匯出的表 ...

SQL Server 資料庫最小宕機遷移方案

一 目的 在做sql server資料庫維護的時候,當上司要求我們把幾十g的資料檔案搬動到其它伺服器,並且要求最小宕機時間的時候,我們有沒什麼方案可以做到這些要求呢?在這裡我們假設這兩台機器並不是在乙個機房上,這樣看起來我們的解決方案才更有意義,如果你那麼好運這兩台機器在同乙個區域網,那麼恭喜你,你...

資料庫遷移

這期專案,需要將另外乙個系統a與現有系統b整合,由於時間比較緊,直接採用遷移oracle資料庫物件的方式,發現之前評估的方案不是特別完善,首先 1 a資料庫為gbk編碼,b資料庫是utf 8編碼格式,a資料遷移需要進行中文字段擴容 至少1.5倍 2 a資料庫需要做效能評估,歷史資料遷移涉的方式,兼顧...