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