
Troubleshooting Orphaned Users
When you restore a database backup to another server, you may experience a problem with orphaned users. The following scenario illustrates the problem and shows how to resolve it.
Use master
sp_addlogin 'test', 'password', 'Northwind'SELECT sid FROM dbo.sysxlogins WHERE name = 'test'
0xE5EFF2DB1688C246855B013148882E75
Grant access to the user you just created
Use Northwind
sp_grantdbaccess 'test'SELECT sid FROM dbo.sysusers WHERE name = 'test'
0xE5EFF2DB1688C246855B013148882E75As you can see, both SID's are identical.
Backup the database
Use master
BACKUP DATABASE Northwind
TO DISK = 'C:\Northwind.bak'
Copy the Backupfile to another Maschine and SQL Server and restore it as follows:
RESTORE FILELISTONLY
FROM DISK = 'C:\Users\Zahn\Work\Northwind.bak'
Northwind
Northwind_logRESTORE DATABASE TestDB
FROM DISK = 'C:\Users\Zahn\Work\Northwind.bak'
WITH
MOVE 'Northwind' TO 'D:\DataMSSQL\Data\northwnd.mdf',
MOVE 'Northwind_log' TO 'D:\DataMSSQL\Data\northwnd.ldf'The restored database contains a user named "test" without a corresponding login, which results in "test" being orphaned.
Check the SID's
Use master
SELECT sid FROM dbo.sysxlogins WHERE name = 'test'
0x39EE98D37EAC2243B7833705EC1C60E3Use TestDB
SELECT sid FROM dbo.sysusers WHERE name = 'test'
0xE5EFF2DB1688C246855B013148882E75
Now, to detect orphaned users, run this code
Use TestDB
sp_change_users_login 'report'
test 0xE5EFF2DB1688C246855B013148882E75The output lists all the logins, which have a mismatch between the entries in the sysusers system table, of the TestDB database, and the sysxlogins system table in the master database.
Resolve Orphaned Users
- 摘自http://www.akadia.com/Use TestDB
sp_change_users_login 'update_one', 'test', 'test'SELECT sid FROM dbo.sysusers WHERE name = 'test'
0x39EE98D37EAC2243B7833705EC1C60E3
use master
SELECT sid FROM dbo.sysxlogins WHERE name = 'test'
0x39EE98D37EAC2243B7833705EC1C60E3This relinks the server login "test" with the the TestDB database user "test". The sp_change_users_login stored procedure can also perform. an update of all orphaned users with the "auto_fix" parameter but this is not recommended because SQL Server attempts to match logins and users by name. For most cases this works; however, if the wrong login is associated with a user, a user may have incorrect permissions.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/58054/viewspace-628032/ ,如需转载,请注明出处,否则将追究法律责任。