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

Для входа в экземпляр 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 с пользователем базы данных хранятся в базе данных. Эти сведения включают в себя имя пользователя базы данных и идентификатор безопасности SID соответствующего имени входа SQL Server. Разрешения этого пользователя базы данных используются для авторизации в базе данных.

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

ms175475.note(ru-ru,SQL.90).gifПримечание.
Имя входа SQL Server не может иметь доступ к базе данных, в которой у него нет соответствующего пользователя базы данных, если только в этой базе данных не включено имя входа гость. Дополнительные сведения о создании учетной записи пользователя базы данных см. в разделе 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).

ms175475.note(ru-ru,SQL.90).gifПримечание.
Процедура sp_change_users_login не может использоваться с именами входа SQL Server, созданными из Windows.

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

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

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

    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;
    
    ms175475.security(ru-ru,SQL.90).gifПримечание безопасности.
    Только имена входа с разрешением ALTER ANY LOGIN могут изменять пароль других имен входа пользователей. Однако только члены роли sysadmin могут изменять пароли членов роли sysadmin.
    ms175475.note(ru-ru,SQL.90).gifПримечание.
    Процедура sp_password не может использоваться для учетных записей Microsoft Windows. Пользователи, подключающиеся к экземпляру SQL Server через свою сетевую учетную запись Windows, проходят проверку подлинности в Windows, поэтому их пароли могут быть изменены только в Windows.

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

См. также

Другие ресурсы

CREATE USER (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)

Справка и поддержка

Получение помощи по SQL Server 2005