Partager via


sp_change_users_login (Transact-SQL)

S’applique à : SQL Server

Mappe un utilisateur de base de données existant à une connexion SQL Server.

Important

Cette fonctionnalité sera supprimée dans une version future de SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Utilisez ALTER USER à la place.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

[ @Action = ] 'Action'

Décrit l’action de la procédure stockée à effectuer. @Action est varchar(10), sans valeur par défaut et peut avoir l’une des valeurs suivantes.

Valeur Description
Auto_Fix Lie une entrée utilisateur dans l’affichage sys.database_principals catalogue système de la base de données active à une connexion SQL Server du même nom. Si une connexion portant le même nom n’existe pas, une connexion est créée. Examinez le résultat de l’instruction Auto_Fix pour vérifier que le lien correct est fait. Évitez d’utiliser Auto_Fix dans des situations sensibles à la sécurité.

Lorsque vous utilisez Auto_Fix, vous devez spécifier @UserNamePattern et @Password si la connexion n’existe pas déjà, sinon vous devez spécifier @UserNamePattern , mais @Password est ignoré. @LoginName doit être NULL. @UserNamePattern doit être un utilisateur valide dans la base de données active. La connexion ne peut pas avoir un autre utilisateur mappé à celui-ci.
Report Répertorie les utilisateurs et les identificateurs de sécurité correspondants dans la base de données active qui ne sont liés à aucune connexion. @UserNamePattern, @LoginName et @Password doivent être NULL spécifiés ou non.

Pour remplacer l’option de rapport par une requête à l’aide des tables système, comparez les entrées sys.server_prinicpals dans les entrées dans sys.database_principals.
Update_One Lie le @UserNamePattern spécifié dans la base de données active à un @LoginName SQL Server existant. @UserNamePattern et @LoginName doivent être spécifiés. @Password doit être NULL spécifié ou non.

[ @UserNamePattern = ] N'UserNamePattern'

Nom d’un utilisateur dans la base de données active. @UserNamePattern est sysname, avec la valeur par défaut NULL.

[ @LoginName = ] N'LoginName'

Nom d’une connexion SQL Server. @LoginName est sysname, avec la valeur par défaut NULL.

[ @Password = ] N'Mot de passe

Mot de passe affecté à une nouvelle connexion SQL Server créée en spécifiant Auto_Fix. @Password est sysname et ne peut pas être NULL. Si une connexion correspondante existe déjà, l’utilisateur et la connexion sont mappés et @Password est ignoré. Si une connexion correspondante n’existe pas, sp_change_users_login crée une connexion SQL Server et attribue @Password en tant que mot de passe pour la nouvelle connexion.

Important

Utilisez toujours un mot de passe fort.

Valeurs des codes de retour

0 (réussite) or 1 (échec).

Jeu de résultats

Nom de la colonne Type de données Description
UserName sysname Nom de l'utilisateur de la base de données.
UserSID varbinary(85) Identificateur de sécurité de l'utilisateur.

Notes

Permet sp_change_users_login de lier un utilisateur de base de données dans la base de données active avec une connexion SQL Server. Si la connexion d’un utilisateur change, utilisez cette option sp_change_users_login pour lier l’utilisateur à la nouvelle connexion sans perdre les autorisations de l’utilisateur. La nouvelle @LoginName ne peut pas être sa, et la @UserNamePattern ne peut pas être dbo, guestou un INFORMATION_SCHEMA utilisateur.

sp_change_users_login ne peut pas être utilisé pour mapper les utilisateurs de base de données aux principaux, certificats ou clés asymétriques de niveau Windows.

sp_change_users_login ne peut pas être utilisé avec une connexion SQL Server créée à partir d’un principal Windows ou avec un utilisateur créé à l’aide CREATE USER WITHOUT LOGINde .

sp_change_users_login ne peut pas être exécuté dans une transaction définie par l’utilisateur.

autorisations

Nécessite l'appartenance au rôle de base de données fixe db_owner. Seuls les membres du rôle serveur fixe sysadmin peuvent spécifier l’option Auto_Fix .

Exemples

Les exemples de code Transact-SQL de cet article sont fondés sur l’échantillon de base de données AdventureWorks2022 ou AdventureWorksDW2022 fourni, que vous pouvez télécharger à partir de la page d’accueil Échantillons et projets communautaires Microsoft SQL Server.

A. Afficher un rapport de l’utilisateur actuel sur les mappages de connexion

Cet exemple produit un rapport des utilisateurs définis dans la base de données active et de leurs identificateurs de sécurité (SID).

EXEC sp_change_users_login 'Report';

B. Mapper un utilisateur de base de données à une nouvelle connexion SQL Server

Dans l’exemple suivant, un utilisateur de base de données est associé à une nouvelle connexion SQL Server. L'utilisateur MB-Sales, associé au départ à un autre compte de connexion, est mappé sur le nouveau compte 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. Mapper automatiquement un utilisateur à une connexion et créer une nouvelle connexion si nécessaire

L’exemple suivant montre comment mapper Auto_Fix un utilisateur existant à une connexion du même nom ou créer la connexion Mary SQL Server qui est le mot de passe B3r12-3x$098f6 si la connexion Mary n’existe pas.

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