Поделиться через


sp_change_users_login (Transact-SQL)

Область применения: SQL Server

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

Внимание

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_change_users_login
    [ @Action = ] 'Action'
    [ , [ @UserNamePattern = ] N'UserNamePattern' ]
    [ , [ @LoginName = ] N'LoginName' ]
    [ , [ @Password = ] N'Password' ]
[ ; ]

Аргументы

[ @Action = ] 'Действие'

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

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

При использовании Auto_Fixнеобходимо указать @UserNamePattern и @Password, если имя входа еще не существует, в противном случае необходимо указать @UserNamePattern, но @Password игнорируется. @LoginName должно бытьNULL. @UserNamePattern должен быть допустимым пользователем в текущей базе данных. Имя входа не может сопоставить другого пользователя с ним.
Report Выводит список пользователей и соответствующих идентификаторов безопасности (SID) в текущей базе данных, которые не связаны с каким-либо именем входа. @UserNamePattern, @LoginName и @Password должны быть NULL указаны или не указаны.

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

[ @UserNamePattern = ] N'UserNamePattern'

Имя пользователя в текущей базе данных. @UserNamePattern имеет имя sysname с значением по умолчаниюNULL.

[ @LoginName = ] N'LoginName'

Имя имени входа SQL Server. @LoginName — sysname с значением по умолчаниюNULL.

[ @Password = ] N'Пароль

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

Внимание

Всегда используйте надежный пароль.

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

0 (успешно) или 1 (сбой).

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

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

Замечания

Используется sp_change_users_login для связывания пользователя базы данных в текущей базе данных с именем входа SQL Server. Если имя входа для пользователя изменяется, используйте sp_change_users_login для связывания пользователя с новым именем входа без потери разрешений пользователя. Новый @LoginName не может быть, и @UserNamePattern не может быть sadboили 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. Параметр может указывать Auto_Fix только члены предопределенных ролей сервера sysadmin.

Примеры

Примеры кода Transact-SQL в этой статье используют AdventureWorks2022 базу данных или AdventureWorksDW2022 пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.

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

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

EXEC sp_change_users_login 'Report';

B. Сопоставление пользователя базы данных с новым именем входа 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 AdventureWorks2022;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO

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

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

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