Диагностика пользователей, утративших связь с учетной записью (SQL Server)
Чтобы войти в экземпляр 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. |
Разрешение пользователей, утративших связь с учетной записью
Чтобы разрешить пользователя, утратившего связь с учетной записью, используйте следующую процедуру:
Следующая команда повторно связывает учетную запись входа сервера, заданную аргументом <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).
После того как будет выполнен код на предыдущем шаге, пользователь сможет обращаться к базе данных. Пользователь сможет затем изменить пароль учетной записи имени входа <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).