Partager via


Résoudre les problèmes liés aux utilisateurs orphelins (SQL Server)

Pour vous connecter à une instance de Microsoft SQL Server, un principal doit disposer d’une connexion SQL Server valide. Cette connexion est utilisée dans le processus d’authentification qui vérifie si le principal est autorisé à se connecter à l’instance de SQL Server. Les connexions SQL Server sur une instance de serveur sont visibles dans l’affichage catalogue sys.server_principals et dans la vue de compatibilité sys.syslogins .

Les connexions SQL Server accèdent à des bases de données individuelles à l’aide d’un utilisateur de base de données mappé à la connexion SQL Server. Il existe deux exceptions à cette règle :

  • Compte invité.

    Il s’agit d’un compte qui, lorsqu’il est activé dans la base de données, active les connexions SQL Server qui ne sont pas mappées à un utilisateur de base de données pour entrer la base de données en tant qu’utilisateur invité.

  • Appartenance aux groupes Microsoft Windows.

    Une connexion SQL Server créée à partir d'un utilisateur Windows peut accéder à la base de données si cet utilisateur est membre d'un groupe Windows lui-même utilisateur de la base de données.

Les informations relatives au mappage d'une connexion SQL Server à un utilisateur de base de données sont stockées dans la base de données. Elles incluent le nom de l'utilisateur de base de données et l'identificateur de sécurité de connexion (SID) de la connexion SQL Server correspondante. Les autorisations de cet utilisateur de base de données sont utilisées pour l’autorisation dans la base de données.

Un utilisateur de base de données pour lequel la connexion SQL Server correspondante n’est pas définie ou est incorrectement définie sur une instance de serveur ne peut pas se connecter à l’instance. L'utilisateur devient donc un utilisateur orphelin de la base de données sur cette instance du serveur. Un utilisateur de base de données peut devenir orphelin si la connexion SQL Server correspondante est supprimée. En outre, un utilisateur de base de données peut devenir orphelin après la restauration ou l’attachement d’une base de données à une autre instance de SQL Server. L'orphanisation peut se produire si l'utilisateur de base de données est associé à un SID qui n'existe pas dans la nouvelle instance de serveur.

Remarque

Une connexion SQL Server ne peut pas accéder à une base de données dans laquelle elle ne dispose pas d’un utilisateur de base de données correspondant, sauf si l’invité est activé dans cette base de données. Pour plus d’informations sur la création d’un compte d’utilisateur de base de données, consultez CREATE USER (Transact-SQL).

Pour détecter les utilisateurs orphelins

Pour détecter les utilisateurs orphelins, exécutez les instructions Transact-SQL suivantes :

USE <database_name>;  
GO;   
sp_change_users_login @Action='Report';  
GO;  

La sortie répertorie les utilisateurs et les identificateurs de sécurité correspondants (SID) dans la base de données active qui ne sont liés à aucune connexion SQL Server. Pour plus d’informations, consultez sp_change_users_login (Transact-SQL).

Remarque

sp_change_users_login ne peut pas être utilisé avec les connexions SQL Server créées à partir de Windows.

Pour résoudre un utilisateur orphelin

Pour résoudre un utilisateur orphelin, procédez comme suit :

  1. La commande suivante relinke le compte de connexion du serveur spécifié par <login_name> avec l’utilisateur de base de données spécifié par <database_user>.

    USE <database_name>;  
    GO  
    sp_change_users_login @Action='update_one', @UserNamePattern='<database_user>', @LoginName='<login_name>';  
    GO  
    
    

    Pour plus d’informations, consultez sp_change_users_login (Transact-SQL).

  2. Après avoir exécuté le code à l’étape précédente, l’utilisateur peut accéder à la base de données. L’utilisateur peut ensuite modifier le mot de passe du compte de connexion login_name> à l’aide de< la procédure stockée sp_password, comme suit :

    USE master   
    GO  
    sp_password @old=NULL, @new='password', @loginame='<login_name>';  
    GO  
    

    Important

    Seules les connexions avec l’autorisation ALTER ANY LOGIN peuvent modifier le mot de passe de la connexion d’un autre utilisateur. Toutefois, seuls les membres du rôle sysadmin peuvent modifier les mots de passe des membres du rôle sysadmin .

    Remarque

    sp_password ne peut pas être utilisé pour les comptes Microsoft Windows. Les utilisateurs se connectant à une instance de SQL Server via leur compte réseau Windows sont authentifiés par Windows ; par conséquent, leurs mots de passe ne peuvent être modifiés que dans Windows.

    Pour plus d’informations, consultez sp_password (Transact-SQL).

Voir aussi

CRÉER UN UTILISATEUR (Transact-SQL)
CRÉER UNE CONNEXION (Transact-SQL)
sp_change_users_login (Transact-SQL)
sp_addlogin (Transact-SQL)
sp_grantlogin (Transact-SQL)
sp_password (Transact-SQL)
sys.sysusers (Transact-SQL)
sys.syslogins (Transact-SQL)