Диагностика пользователей, утративших связь с учетной записью

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

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

  • Учетная запись гостя.

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

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

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

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

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

ПримечаниеПримечание

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

Обнаружение утративших связь с учетной записью пользователей

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

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

Выходные данные содержат список пользователей и соответствующие идентификаторы безопасности в текущей базе данных, которые не связаны ни с одним именем входа 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).