📜  SQL Server 中的孤立用户

📅  最后修改于: 2022-05-13 01:54:41.765000             🧑  作者: Mango

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 

输出 -

UserNameUserSID
Geek10x7A4X871C3EXX7C42X67B5F3CD2C35FXX
Geek20x7A4E871C3EXX27C42B67XXF3CC4C35FXX
Geek30x7A5E871X3EXX27C42F57XXF3CC4C35FXX
Geek40x7A5E871C3EFF27C32D67XXF3CC4C45FXX

以下方法可用于修复孤儿用户。

  1. 与孤立用户 SID 一起使用:
    要修复任何孤立用户,请使用 SID 创建登录。

    句法 :

    USE MASTER
    CREATE LOGIN [LoginName] 
    WITH PASSWORD = 'Password',
    SID = 0x7A4X871C3EXX7C42X67B5F3CD2C35FXX 

    例子 -

    USE MASTER
    CREATE LOGIN [Geek1] WITH PASSWORD = 'Pa$$W0rd1', 
    SID = 0x7A4X871C3EXX7C42X67B5F3CD2C35FXX 
    
  2. 使用 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
    
  3. 使用 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. UserName2. UserSID

    成功修复孤儿用户后,上述命令将不会产生任何孤儿用户(UserName 和 UserSID)。