meta données pour cette page
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
USE adventureWorks GO sp_change_users_login @Action='Report' GO
- corriger les orphelins
USE AdventureWorks GO sp_change_users_login @Action='update_one', @UserNamePattern='TestUser1', @LoginName='TestUser1' GO
Méthode 2
- Identifier les Orphelins
-- 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;
- corriger les orphelins si le Login existe déjà
alter user 'robert' with login 'robert'
- ou créer le Login en forçant le SID du user de BDD
-- 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'