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