Поделиться через


Устранение проблем с осиротевшими пользователями (SQL Server)

Чтобы войти в экземпляр Microsoft SQL Server, пользователь должен иметь действительные учетные данные SQL Server. Этот логин используется в процессе аутентификации, который проверяет, разрешено ли пользователю подключаться к экземпляру SQL Server. Учетные записи SQL Server в экземпляре сервера отображаются в представлении каталога sys.server_principals и представлении совместимости sys.syslogins.

Учётные записи входа в SQL Server получают доступ к отдельным базам данных, используя пользователя базы данных, который сопоставлен с этими учетными записями. Существует два исключения для этого правила:

  • Гостевая учетная запись.

    Это учетная запись, которая при включении в базе данных позволяет учетным записям SQL Server, которые не сопоставлены с пользователем базы данных, входить в базу данных в качестве гостевого пользователя.

  • Членство в группах Microsoft Windows.

    Имя входа SQL Server, созданное пользователем Windows, может ввести базу данных, если пользователь Windows является членом группы Windows, которая также является пользователем в базе данных.

Сведения о сопоставлении имени входа SQL Server с пользователем базы данных хранятся в базе данных. Он содержит имя пользователя базы данных и идентификатор безопасности соответствующего имени входа SQL Server. Разрешения этого пользователя базы данных используются для авторизации в базе данных.

Пользователь базы данных, для которого соответствующее имя входа SQL Server не определено или неправильно определено на экземпляре сервера, не может войти в экземпляр. Такой пользователь называется утратившим связь с учетной записью базы данных на этом экземпляре сервера. Пользователь базы данных может стать потерянным, если соответствующее имя входа SQL Server удалено. Кроме того, пользователь базы данных может стать потерянным после восстановления или подключения базы данных к другому экземпляру SQL Server. Ошибка может произойти, если пользователь базы данных сопоставляется с идентификатором безопасности, который отсутствует в новом экземпляре сервера.

Замечание

Имя входа SQL Server не может получить доступ к базе данных, в которой отсутствует соответствующий пользователь базы данных, если в этой базе данных не включен guest. Сведения о создании учетной записи пользователя базы данных см. в статье CREATE USER (Transact-SQL).

Обнаружение потерянных пользователей

Чтобы обнаружить потерянных пользователей, выполните следующие инструкции Transact-SQL:

USE <database_name>;  
GO;   
sp_change_users_login @Action='Report';  
GO;  

В выходных данных перечислены пользователи и соответствующие идентификаторы безопасности (SID) в текущей базе данных, которые не связаны с каким-либо именем входа SQL Server. Дополнительные сведения см. в разделе sp_change_users_login (Transact-SQL).

Замечание

sp_change_users_login нельзя использовать с именами входа SQL Server, созданными из Windows.

Устранение осиротевших пользователей

Чтобы устранить потерянных пользователей, используйте следующую процедуру:

  1. Следующая команда повторно связывает учетную запись входа сервера, указанную login_name с пользователем базы данных, указанным <><database_user>.

    USE <database_name>;  
    GO  
    sp_change_users_login @Action='update_one', @UserNamePattern='<database_user>', @LoginName='<login_name>';  
    GO  
    
    

    Дополнительные сведения см. в разделе sp_change_users_login (Transact-SQL).

  2. После запуска кода на предыдущем шаге пользователь может получить доступ к базе данных. Затем пользователь может изменить пароль учетной записи <login_name> с помощью хранимой процедуры sp_password следующим образом:

    USE master   
    GO  
    sp_password @old=NULL, @new='password', @loginame='<login_name>';  
    GO  
    

    Это важно

    Только учетные записи с разрешением ALTER ANY LOGIN могут изменить пароль другой учетной записи пользователя. Однако только члены роли sysadmin могут изменять пароли членов роли sysadmin .

    Замечание

    sp_password нельзя использовать для учетных записей Microsoft Windows. Пользователи, подключающиеся к экземпляру SQL Server с помощью учетной записи сети Windows, проходят проверку подлинности Windows; таким образом, их пароли можно изменить только в Windows.

    Дополнительные сведения см. в разделе sp_password (Transact-SQL).

См. также

СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ (Transact-SQL)
CREATE LOGIN (Transact-SQL)
sp_change_users_login (Transact-SQL)
sp_addlogin (Transact-SQL)
sp_grantlogin (Transact-SQL)
sp_password (Transact-SQL)
sys.sysusers (Transact-SQL)
sys.syslogins (Transact-SQL)