SQL SERVER 資料庫遷移孤立使用者的解決方法
如果用附加或者恢復備份的方法把資料庫從一個電腦移動到另外一個電腦,資料庫的使用者和SQL的登入會衝突,登入沒有辦法和使用者關聯,造成孤立使用者.
為了解決這個問題,首先在目標SQL系統上建立與使用者同名的登入,然後在資料庫上執行下面指令把使用者和登入關聯
use 資料庫
sp_change_users_login 'update_one', 'test', 'test'
(test使用者 和 test登入 關聯)
如果資料庫預先設定了大量的使用者許可權,可以用這個方法方便的移動到新伺服器上
更詳細的用法,請看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;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO
C. 自動將使用者對映到登入名(必要時新建一個登入名)
以下示例顯示如何使用 Auto_Fix 將現有使用者對映到同名的登入名,以及如何在不存在登入名 Mary 的情況下,建立密碼為 B3r12-3x$098f6 的 SQL Server 登入名 Mary。
複製程式碼
USE AdventureWorks;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-621010/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server資料庫遷移SQLServer資料庫
- SQL Server 資料庫最小當機遷移方案GESQLServer資料庫
- 案例分析:700G SQL Server資料庫遷移HGSQLServer資料庫
- 從 SQL Server 到 MySQL (一):異構資料庫遷移ServerMySql資料庫
- 解決無法連線SQL Server資料庫的方法BWSQLServer資料庫
- 兩款工具解決SQL Server遷移問題DJSQLServer
- SQL Server資料庫建立新使用者及關聯資料庫的方法教程SQLServer資料庫
- SQL Server 資料庫無法重新命名的解決SQLServer資料庫
- sql server資料庫附加錯誤的解決過程SQLServer資料庫
- 資料庫遷移資料庫
- SQL SERVER 資料庫被標記為“可疑”的解決辦法SQLServer資料庫
- SQL Server 2016升級遷移過程中效能問題解決案例SQLServer
- 1.1資料庫物件結構遷移方法資料庫物件
- 異構資料庫遷移 sql等價改寫資料庫SQL
- SQL SERVER 2012資料庫自動備份的方法SQLServer資料庫
- 解決遷移資料庫錯誤,索引長度過長資料庫索引
- 使用SQL SERVER儲存過程實現歷史資料遷移SQLServer儲存過程
- 資料庫映象 (SQL Server)資料庫SQLServer
- SQL Server資料庫安全SQLServer資料庫
- Oracle資料庫升級或資料遷移的方法探討Oracle資料庫
- laravel資料庫遷移Laravel資料庫
- 資料庫遷移 :理解資料庫
- redis資料庫遷移Redis資料庫
- Mysql資料遷移方法MySql
- Sql Server資料庫檔案丟失的恢復方法SQLServer資料庫
- SQL server資料庫高可用日誌傳送的方法SQLServer資料庫
- JPA使用pg資料庫時,bool欄位不能跨庫遷移的解決方案資料庫
- 伺服器資料遷移的方法-硬體不同如何遷移資料伺服器
- sql server 資料庫收縮SQLServer資料庫
- Blazor使用sql server 資料庫BlazorSQLServer資料庫
- SQL Server資料庫巡檢SQLServer資料庫
- sql server 2005資料庫快照SQLServer資料庫
- SQL Server收縮資料庫SQLServer資料庫
- 管理SQL Server資料庫安全SQLServer資料庫
- dm資料庫遷移命令資料庫
- 用rman遷移資料庫資料庫
- 資料庫遷移手記資料庫
- 遷移MySQL 5.7資料庫MySql資料庫
- 資料庫遷移神器——Flyway資料庫