SQL Server 中的孤立用户
孤立用户是在数据库级别可用但其映射登录在服务器级别不可用的用户。当从另一台服务器上的一台服务器的备份恢复数据库时,会创建孤立用户。
要获取 SQL Server 中任何数据库中的孤儿用户,请使用以下命令:
句法 :
USE DATABASENAME
EXEC sp_change_users_login report
GO
例子 -
假设我们已经在 Server2 中使用以下命令将GeeksDb从 Server1 恢复到 Server2。
USE GeeksDb
EXEC sp_change_users_login report
GO
输出 -
UserName | UserSID |
---|---|
Geek1 | 0x7A4X871C3EXX7C42X67B5F3CD2C35FXX |
Geek2 | 0x7A4E871C3EXX27C42B67XXF3CC4C35FXX |
Geek3 | 0x7A5E871X3EXX27C42F57XXF3CC4C35FXX |
Geek4 | 0x7A5E871C3EFF27C32D67XXF3CC4C45FXX |
以下方法可用于修复孤儿用户。
- 与孤立用户 SID 一起使用:
要修复任何孤立用户,请使用 SID 创建登录。句法 :
USE MASTER CREATE LOGIN [LoginName] WITH PASSWORD = 'Password', SID = 0x7A4X871C3EXX7C42X67B5F3CD2C35FXX
例子 -
USE MASTER CREATE LOGIN [Geek1] WITH PASSWORD = 'Pa$$W0rd1', SID = 0x7A4X871C3EXX7C42X67B5F3CD2C35FXX
- 使用 UPDATE_ONE :
即使登录名和用户名不同,也可以使用 UPDATE_ONE 进行映射,或者可以使用登录 SID 更改用户的 SID。首先,创建新的登录。
USE MASTER CREATE LOGIN [LoginName] WITH PASSWORD = 'Password'
创建登录后,使用 UPDATE_ONE 修复孤儿用户。
句法 :
USE DATABASENAME sp_change_users_login UPDATE_ONE, 'UserName', 'LoginName' GO
例子 -
USE MASTER CREATE LOGIN [Geek2] WITH PASSWORD = 'Pa$$W0rd2' USE GeekDb sp_change_users_login UPDATE_ONE, 'Geek2', 'Geek2' GO
- 使用 AUTO_FIX –
TYPE 1 :当登录名和用户名相同时。首先创建登录,然后将登录 SID 分配给孤立用户。
句法 :
USE master CREATE LOGIN [LoginName] WITH PASSWORD = 'Password' USE DATABASENAME sp_change_users_login AUTO_FIX, 'LoginName/UserName' Go
例子 :
USE master CREATE LOGIN [Geek3] WITH PASSWORD = 'Pa$$W0rd3' USE GeekDB sp_change_users_login AUTO_FIX, 'Geek3/Geek3' Go
TYPE 2:不创建登录。
句法 :
USE DATABASENAME sp_change_users_login AUTO_FIX, 'UserName', NULL, 'Password' GO
例子 :
USE GeekDb sp_change_users_login AUTO_FIX, 'Geek4', NULL, 'Pa$$W0rd4' GO
使用上述方法后,在任何数据库中获取孤儿用户:
USE GeeksDb EXEC sp_change_users_login report GO
输出 -
1. UserName 2. UserSID 成功修复孤儿用户后,上述命令将不会产生任何孤儿用户(UserName 和 UserSID)。