sp_change_users_login (Transact-SQL)
Сопоставляет существующего пользователя базы данных с именем входа SQL Server. В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. Используйте вместо этого команду ALTER USER.
Синтаксис
sp_change_users_login [ @Action = ] 'action'
[ , [ @UserNamePattern = ] 'user' ]
[ , [ @LoginName = ] 'login' ]
[ , [ @Password = ] 'password' ]
Аргументы
[ @Action = ] 'action'
Описывает действие, которое будет выполнено процедурой. Аргумент action имеет тип varchar(10). Аргумент action может иметь одно из следующих значений.Значение
Описание
Auto_Fix
Связывает запись пользователя в системном представлении каталога sys.database_principals в текущей базе данных с именем входа SQL Server, имеющим такое же имя. Если имени входа с таким же именем не существует, оно будет создано. Исследуйте результат выполнения инструкции Auto_Fix, чтобы убедиться, что фактически сделана правильная связь. Избегайте использования Auto_Fix в чувствительных к опасности ситуациях.
При использовании Auto_Fix необходимо указать аргументы user и password, если имени входа еще не существует; иначе необходимо указать аргумент user, но аргумент password не будет учитываться. Аргумент login должен иметь значение NULL. Аргумент user должен быть допустимым пользователем в текущей базе данных. Не может быть еще одного пользователя, сопоставленного с именем входа.
Report
Перечисляет пользователей и соответствующие идентификаторы безопасности (SID) в текущей базе данных, которые не связаны ни с каким именем входа. Аргументы user, login и password должны иметь значение NULL или не должны быть указаны.
Update_One
Связывает указанный аргумент user в текущей базе данных с существующим аргументом SQL Serverlogin. Аргументы user и login должны быть указаны. Аргумент password должен иметь значение NULL или не должен быть указан.
[ @UserNamePattern = ] 'user'
Имя пользователя в текущей базе данных. Аргумент user имеет тип sysname и значение по умолчанию NULL.[ @LoginName = ] 'login'
Имя входа в SQL Server. Аргумент login имеет тип sysname и значение по умолчанию NULL.[ @Password = ] 'password'
Пароль, назначенный для нового имени входа SQL Server, которое создано путем указания значения Auto_Fix. Если совпадающее имя входа уже существует, пользователь и имя входа будут сопоставлены, а аргумент password пропущен. Если совпадающего имени входа не существует, процедура sp_change_users_login создаст новое имя входа SQL Server и назначит password как пароль для нового имени входа. Аргумент password имеет тип sysname и не должен иметь значение NULL.Примечание по безопасности Выбирайте надежные пароли. Дополнительные сведения см. в разделе Надежные пароли.
Значения кода возврата
0 (успешное завершение) или 1 (неуспешное завершение)
Результирующие наборы
Имя столбца |
Тип данных |
Описание |
---|---|---|
UserName |
sysname |
Имя пользователя базы данных. |
UserSID |
varbinary(85) |
Идентификатор безопасности пользователя. |
Замечания
Используйте процедуру sp_change_users_login, чтобы связать пользователя базы данных в текущей базе данных с именем входа SQL Server. Если имя входа для пользователя изменилось, используйте процедуру sp_change_users_login, чтобы связать пользователя с новым именем входа без потери пользовательских разрешений. Новым значением login не может быть имя sa, а значением userне может быть dbo, guest или пользователь INFORMATION_SCHEMA.
Процедура sp_change_users_login не может использоваться для сопоставления пользователей базы данных c участниками уровня Windows, сертификатами или асимметричными ключами.
Процедуру sp_change_users_login нельзя использовать с именем входа SQL Server, созданным на основе участника Windows, или с пользователем, созданным с помощью команды CREATE USER WITHOUT LOGIN.
Процедура sp_change_users_login не может выполняться в определяемой пользователем транзакции.
Разрешения
Требуется членство в предопределенной роли базы данных db_owner. Параметр Auto_Fix могут указывать только члены предопределенной роли сервера sysadmin.
Примеры
А. Отображение отчета по текущим сопоставлениям пользователей именам входа
Следующий пример создает отчет по пользователям в текущей базе данных и их идентификаторам безопасности (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 AdventureWorks;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO
В. Автоматическое сопоставление пользователя имени входа (создание при необходимости нового имени входа)
Следующий пример показывает, как использовать Auto_Fix, чтобы сопоставить существующего пользователя имени входа с таким же именем или создать имя входа SQL ServerMary, которое имеет пароль B3r12-3x$098f6, если имени входа Mary не существует.
USE AdventureWorks;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO