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 не может быть 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. Параметр может указывать 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