Comment migrer les utilisateurs Azure DevOps Server d'un domaine vers un autre, ou vers un workgroup sans perdre leurs profils ?
Migrer une ferme Azure DevOps d'un domaine à l'autre, demande un peu de doigté. Surtout pour ce qui concerne la gestion des utilisateurs.
Heureusement, la CLI permet de déplacer les utilisateurs d'un domaine à l'autre. Cela est plutôt bien expliqué dans la documentation que l'on peut consulter ici.
Mais il arrive que cela ne fonctionne pas pour quelques utilisateurs (petites différences dans le login, nom changé… etc…).
Pour cela, on peut compter sur la commande qui suit :
# Mapping de l'utilisateur
.\TFSConfig Identities /change /fromdomain:AncienDomaine/todomain:NouveauDomaine /account:AncienLogin /toaccount:NouveauLogin
Malheureusement, dans le cas d'une migration d'un domaine vers un workgroup, cela ne fonctionne pas. On lance les diverses commandes, mais les utilisateurs ne récupérèrent pas leurs droits, espaces de travail, requêtes, tableaux de bord, branches, etc.
Fort heureusement, il suffit de faire un petit tour dans la base de données de configuration pour corriger cela (par défaut, il s'agit de la base TFS_Config)
Dans un premier temps, il faut identifier les lignes relatives aux différentes identités de notre utilisateur. Exemple :
SELECT *
FROM tbl_Identity
WHERE AccountName LIKE '%NouveauLogin%'
En même temps, on peut utiliser powershell pour recouper ces informations avec le nouveau SID de l'utilisateur.
# Vérification du SID Windows de l'utilisateur local
Get-LocalUser -Name "NouveauLogin" | Select Name, SID
Avec ces informations, vous devriez pouvoir identifier :
- L'ancien ID
- L'ancien SID
- Le nouvel ID
- Le nouveau SID
Ensuite, pour intervertir les identités, il suffit d'échanger les ID.
Personnellement, j'opte pour une solution simple en trois étapes:
- Affecter un faux ID à la ligne contenant le nouveau SID.
- Affecter le nouvel ID à la ligne contenant l'ancien SID.
- Affecter l'ancien ID à la ligne contenant le nouveau SID.
Exemple :
UPDATE tbl_Identity
SET [id]='F5331C74-6F8F-40C2-8F8E-000000000000'
WHERE [sId]='S-1-5-12-383200802-4186732323-4104849335-7817'
UPDATE tbl_Identity
SET [id]='AF9C2B4C-E4A4-43A9-B5E4-E9337DA9D900'
WHERE [sId]='S-1-5-33-2491080940-717456908-2923986041-1018'
UPDATE tbl_Identity
SET [id]='F5331C74-6F8F-40C2-8F8E-F3F943EF99A5'
WHERE [sId]='S-1-5-12-383200802-4186732323-4104849335-7817'