meta données pour cette page
  •  

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
sql_server:database:orphans [05/11/2025 09:27] – créée mdlsql_server:database:orphans [05/11/2025 10:30] (Version actuelle) mdl
Ligne 1: Ligne 1:
 ====== User Orphelins ====== ====== User Orphelins ======
  
 +Après l'attachement ou la restauration d'une base de données, les utilisateurs et les connexions précédemment créés dans cette base de données ne correspondent pas et sont considérés comme des utilisateurs orphelins. 
 +Les symptômes les plus courants sont les suivants:
 +  * l'application peut rencontrer des erreurs d'échec de connexion. 
 +  * un message indiquant que l'utilisateur existe déjà dans la base de données actuelle lorsque vous essayez d'ajouter l'identifiant de connexion à la base de données. 
 +
 +**__Méthode 1__**
 +
 +Cette méthode fonctionne toujours jusqu'à MSSQL 2025, mais sera deprecié dans les prochaines release.
 +  * Identifier les Orphelins
 +<code TSQL>
 +USE adventureWorks
 +GO
 +sp_change_users_login @Action='Report'
 +GO
 +</code>
 +
 +  * corriger les orphelins
 +<code TSQL>
 +USE AdventureWorks
 +GO
 + 
 +sp_change_users_login @Action='update_one',
 +@UserNamePattern='TestUser1',
 +@LoginName='TestUser1'
 +GO
 +</code>
 +
 +**__Méthode 2__**
 +
 +
 +  * Identifier les Orphelins
 +<code TSQL>
 + -- Use your database
 +USE [YourDatabaseName];
 +GO
 +
 +-- Create a temporary table to store user information
 +CREATE TABLE #DBUsers
 +(
 +    DBUserName NVARCHAR(128),
 +    DBUserSID VARBINARY(85)
 +);
 +
 +-- Insert database user information into the temp table
 +INSERT INTO #DBUsers (DBUserName, DBUserSID)
 +SELECT name, sid 
 +FROM sys.database_principals 
 +WHERE type_desc IN ('SQL_USER', 'WINDOWS_USER', 'WINDOWS_GROUP');
 +
 +-- Select and compare with instance logins
 +SELECT 
 +    u.DBUserName AS DatabaseUser, 
 +    u.DBUserSID AS DatabaseUserSID,
 +    p.name AS InstanceLogin,
 +    p.sid AS InstanceLoginSID,
 +    CASE 
 +        WHEN p.sid IS NULL THEN 'Orphaned User' 
 +        ELSE 'Matched' 
 +    END AS Status
 +FROM 
 +    #DBUsers u
 +LEFT JOIN 
 +    sys.server_principals p ON u.DBUserSID = p.sid;
 +
 +-- Drop the temporary table
 +DROP TABLE #DBUsers;
 +</code>
 +
 +  * corriger les orphelins si le Login existe déjà
 +<code TSQL>
 + alter user 'robert' with login 'robert'
 +</code>
 +
 +  * ou créer le Login en forçant le SID du user de BDD
 +<code TSQL>
 +-- Lister le SID du user de BDD1211
 +use [DB1]
 +GO
 +select name,type_desc,create_date,sid from sys.database_principals
 +
 +
 +-- SQL LOGIN
 +create login [robert]
 +with password 'xxxxxx', sid='xxxxx'
 +
 +-- AD USER/GROUP
 +create login [AD\robert] from windows
 +with  sid='xxxxx'
 +</code>