Dépannage des utilisateurs orphelins

Pour se connecter à une instance de Microsoft SQL Server, un serveur principal doit posséder une connexion SQL Server valide. Cette connexion est utilisée dans le processus d'authentification chargé de vérifier que le serveur principal est autorisé à se connecter à l'instance SQL Server. Les connexions SQL Server d'une instance de serveur sont visibles dans l'affichage catalogue sys.server_principals et la vue de compatibilité sys.syslogins.

Les connexions SQL Server accèdent aux bases de données à l'aide d'un utilisateur de base de données mappé à la connexion SQL Server. Il y a deux exceptions à cette règle :

  • Le compte invité.

    Lorsqu'il est activé dans la base de données, ce compte autorise les connexions SQL Server non mappées à un utilisateur de base de données à accéder en tant qu'invité à la base de données.

  • 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 comme autorisation de la base de données.

Un utilisateur de base de données pour lequel la connexion SQL Server correspondante n'est pas définie sur une instance serveur, ou l'est de façon incorrecte, ne peut pas se connecter à cette instance. L'utilisateur devient donc un utilisateur orphelin de la base de données sur cette instance de serveur. Un utilisateur de base de données peut se retrouver orphelin si la connexion SQL Server correspondante est supprimée. De même, un utilisateur peut devenir orphelin après qu'une base de données a été restaurée ou attachée à une autre instance de SQL Server. Le fait de se retrouver orphelin peut se produire si l'utilisateur de base de données est mappé à un SID absent dans la nouvelle instance de serveur.

[!REMARQUE]

Une connexion SQL Server ne peut pas accéder à une base de données dans laquelle est absent l'utilisateur de base de données correspondant, à moins que l'utilisateur invité ne soit activé dans la base de données. Pour obtenir des informations sur la création d'un compte d'utilisateur de base de données, consultez CREATE USER (Transact-SQL).

Pour détecter des utilisateurs orphelins

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

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

Vous obtenez la liste des utilisateurs et de leurs identificateurs de sécurité (SID) qui, dans la base de données en cours, ne sont pas liés à une 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 le cas d'un utilisateur orphelin

Pour résoudre le cas d'un orphelin, utilisez la procédure suivante :

  1. La commande suivante rétablit le lien entre le compte de connexion serveur spécifié par <login_name> et l'utilisateur de la 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. Dès l'exécution du code de l'étape ci-dessus, 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> en utilisant la procédure stockée sp_password :

    USE master 
    GO
    sp_password @old=NULL, @new='password', @loginame='<login_name>';
    GO
    
    Remarque relative à la sécuritéRemarque relative à la sécurité

    Seuls les comptes de connexion avec l'autorisation ALTER ANY LOGIN peuvent modifier le mot de passe du compte de 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]

    La procédure stockée sp_password ne peut pas être utilisée avec des comptes Microsoft Windows. Les utilisateurs se connectant à une instance SQL Server par l'intermédiaire de 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).