sp_change_users_login (Transact-SQL)

Применимо к: даSQL Server (все поддерживаемые версии)

Сопоставляет существующего пользователя базы данных с именем входа SQL Server.

Важно!

В будущей версии Microsoft SQL Server этот компонент будет удален. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Используйте вместо этого инструкцию ALTER USER .

Значок ссылки на раздел Синтаксические обозначения в Transact-SQL

Синтаксис

  
sp_change_users_login [ @Action = ] 'action'   
    [ , [ @UserNamePattern = ] 'user' ]   
    [ , [ @LoginName = ] 'login' ]   
    [ , [ @Password = ] 'password' ]  
[;]  

Аргументы

[ @Action =] "действие"
Описывает действие, которое будет выполнено процедурой. Action имеет тип varchar (10). действие может иметь одно из следующих значений.

Значение Описание
Auto_Fix Связывает запись пользователя в системном представлении каталога sys.database_principals в текущей базе данных с именем входа SQL Server, имеющим такое же имя. Если имени входа с таким же именем не существует, оно будет создано. Проверьте результат инструкции Auto_Fix , чтобы убедиться в том, что фактическая ссылка создана. Старайтесь не использовать Auto_Fix в ситуациях с учетом безопасности.

При использовании Auto_Fix необходимо указать User и Password , если имя входа еще не существует, в противном случае необходимо указать User , но пароль будет проигнорирован. имя для входа должно быть равно null. пользователь должен быть допустимым пользователем в текущей базе данных. Не может быть еще одного пользователя, сопоставленного с именем входа.
Отчет Перечисляет пользователей и соответствующие идентификаторы безопасности (SID) в текущей базе данных, которые не связаны ни с каким именем входа. пользователь, имя для входа и пароль должны быть равны null или не указаны.

Чтобы заменить параметр отчета запросом, использующим системные таблицы, сравните записи в sys.server_prinicpals с записями в sys.database_principals.
Update_One Связывает указанного пользователя в текущей базе данных с существующим SQL Server именем входа. необходимо указать пользователя и имя для входа . пароль должен быть равен null или не указан.

[ @UserNamePattern =] "пользователь"
Имя пользователя в текущей базе данных. Аргумент User имеет тип sysname и значение по умолчанию NULL.

[ @LoginName =] "Login"
Имя входа SQL Server. Аргумент login имеет тип sysname и значение по умолчанию NULL.

[ @Password =] "пароль"
Пароль, назначенный новому SQL Server имени входа, которое создается путем указания Auto_Fix. Если совпадающее имя входа уже существует, пользователь и имя входа сопоставляются, а пароль игнорируется. Если соответствующее имя входа не существует, sp_change_users_login создает новое SQL Server имя входа и присваивает ему пароль в качестве пароля для нового имени входа. Аргумент Password имеет тип sysname и не должен иметь значение null.

ВАЖНО! Всегда используйте надежный пароль!

Значения кода возврата

0 (успешное завершение) или 1 (неуспешное завершение)

Результирующие наборы

Имя столбца Тип данных Описание
UserName sysname Имя пользователя базы данных.
UserSID varbinary(85) Идентификатор защиты пользователя.

Remarks

Используйте процедуру sp_change_users_login, чтобы связать пользователя базы данных в текущей базе данных с именем входа SQL Server. Если имя входа для пользователя изменилось, используйте процедуру sp_change_users_login, чтобы связать пользователя с новым именем входа без потери пользовательских разрешений. Новое имя входа не может быть SA, а пользователь не может быть dbo, Guest или INFORMATION_SCHEMA пользователем.

Процедура sp_change_users_login не может использоваться для сопоставления пользователей базы данных с участниками уровня Windows, сертификатами или асимметричными ключами.

Процедуру sp_change_users_login нельзя использовать с именем входа SQL Server, созданным на основе участника Windows, или с пользователем, созданным с помощью команды CREATE USER WITHOUT LOGIN.

Процедура sp_change_users_login не может выполняться в определяемой пользователем транзакции.

Разрешения

Необходимо членство в предопределенной роли базы данных db_owner. Только члены предопределенной роли сервера sysadmin могут указывать параметр Auto_Fix .

Примеры

A. Отображение отчета по текущим сопоставлениям пользователей именам входа

Следующий пример производит отчет по пользователям в текущей базе данных и их идентификаторам защиты (SIDs).

EXEC sp_change_users_login 'Report';  

Б. Сопоставление пользователя базы данных новому имени входа SQL Server

В следующем примере пользователь базы данных будет связан с новым именем входа SQL Server. Пользователь базы данных MB-Sales, который сначала был сопоставлен с другим именем входа, будет повторно сопоставлен с именем входа MaryB.

--Create the new login.  
CREATE LOGIN MaryB WITH PASSWORD = '982734snfdHHkjj3';  
GO  
--Map database user MB-Sales to login MaryB.  
USE AdventureWorks2012;  
GO  
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';  
GO  

В. Автоматическое сопоставление пользователя имени входа (создание при необходимости нового имени входа)

Следующий пример показывает, как использовать параметр Auto_Fix, чтобы сопоставить существующего пользователя с именем входа с таким же именем или создать имя входа SQL ServerMary, которое имеет пароль B3r12-3x$098f6, если имя входа Mary не существует.

USE AdventureWorks2012;  
GO  
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';  
GO  

См. также

Хранимые процедуры безопасности (Transact-SQL)
CREATE LOGIN (Transact-SQL)
sp_adduser (Transact-SQL)
sp_helplogins (Transact-SQL)
Системные хранимые процедуры (Transact-SQL)
sys.database_principals (Transact-SQL)