Partager via


Dépanner des utilisateurs orphelins (SQL Server)

Pour se connecter à un 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 au instance de SQL Server. Les connexions SQL Server sur un serveur instance sont visibles dans la vue catalogue sys.server_principals et dans la vue de compatibilité sys.syslogins.

SQL Server connexions accèdent à des bases de données individuelles à 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é.

    Il s’agit d’un compte qui, lorsqu’il est activé dans la base de données, permet SQL Server connexions qui ne sont pas mappées à un utilisateur de base de données d’entrer dans 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 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 ou est incorrectement définie sur un serveur instance ne peut pas se connecter au 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. 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.

Notes

Une connexion SQL Server ne peut pas accéder à une base de données dans laquelle il manque 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 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;  

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

Notes

sp_change_users_login ne peut pas être utilisé avec SQL Server connexions 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 ressocie le compte de connexion au 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. 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> à 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

    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 .

    Notes

    sp_password ne peut pas être utilisé pour les comptes Microsoft Windows. Les utilisateurs qui se connectent à un 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)
CREATE LOGIN (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)