Il existe des limitations sur Active Directory, comme la longueur du nom complet d'un objet, le nombre d'identificateur de sécurité (SID). Généralement, ces limites sont suffisamment importantes pour ne concerner qu'un nombre très restreint d'entreprise. Vous trouverez dans le lien suivant le détail des limites d'Active Directory Services :
Dans cet article, nous allons parler du nombre maximal d'identificateurs de sécurité qui peut être créé dans un domaine. Lorsque vous ajoutez un objet tel qu'un utilisateur, un ordinateur, il se voit attribuer un identificateur de sécurité unique. Lorsque vous configurer des droits pour un utilisateur sur un dossier ( DACL : discretionary access control list ), c'est l'identifiant qui est enregistré dans la liste.
Le SID d'un objet est composé de deux parties. La première partie est un identifiant unique pour l'ensemble du domaine (entouré en orange ci-dessous). Si vous créez deux domaines distincts avec le même nom, ils auront tout de même des identifiants de domaine différents. La deuxième partie est l'identifiant de l'objet dans le domaine. Il est donc unique (entouré en vert ci-dessous).
Il existe des objets qui utilisent des identifiants connus et identiques entre les domaines AD. Si vous souhaitez plus d'informations vous pouvez consulter le lien suivant :
Dans Active Directory, les contrôleurs de domaines sont multi-maitres, il est donc possible de créer des objets depuis n'importe quel contrôleur de domaine. Pour cela chaque contrôleur de domaine dispose d'une plage d'identifiant qui lui est dédiée. Un contrôleur de domaine dans le domaine dispose d'un rôle FSMO spécifique : le maître RID. Le contrôleur de domaine qui dispose de ce rôle a en charge de distribuer des plages d'identifiants réservés aux autres contrôleurs de domaine.
Il est possible de connaître la plage d'identifiant disponible sur le maitre RID avec la commande :
Dcdiag.exe /TEST:RidManager /v | find /i "Available RID Pool for the Domain"
Le script PowerShell suivant permet également d'afficher l'état des plages disponibles. Il suffit de modifier le nom ldap du domaine.
function Get-RIDsremainingAdPsh
{
param ($domainDN)
$property = get-adobject "cn=rid manager$,cn=system,$domainDN" -property ridavailablepool -server ((Get-ADDomain $domaindn).RidMaster)
$rid = $property.ridavailablepool
[int32]$totalSIDS = $($rid) / ([math]::Pow(2,32))
[int64]$temp64val = $totalSIDS * ([math]::Pow(2,32))
[int32]$currentRIDPoolCount = $($rid) – $temp64val
$ridsremaining = $totalSIDS – $currentRIDPoolCount
Write-Host "RIDs issued: $currentRIDPoolCount"
Write-Host "RIDs remaining: $ridsremaining"
}
Get-RIDsremainingAdPsh -domainDN "DC=htrab,DC=lan"
Lorsqu'un contrôleur de domaine a épuisé l'ensemble des identifiants de sa plage il va demander une nouvelle plage au maitre d'opération.
Dans ce cas l'événement « 16647 », source : « Directory-Services-SAM » est enregistré dans le journal « Système ».
L'événement « 16648 » indique que le serveur a reçu une nouvelle plage d'identifiant.
Il existe des situations où vous devrez invalider la plage d'identifiants actuellement attribués à un contrôleur de domaine. Par exemple lors de la restauration d'un contrôleur de domaine ou d'un domaine Active Directory. En effet si vous n'invalidez pas la plage actuelle, un nouvel utilisateur pourra obtenir un identifiant déjà attribué à un autre compte et qui a été créé après la sauvegarde. Ce compte dispose peut-être d'autorisations d'accès sur des ressources de votre réseau. En invalidant la plage actuellement utilisée par le contrôleur de domaine, vous l'obligez à en demander une nouvelle et vous vous garantissez que le prochain objet créé ne pourra reprendre un identifiant.
Le script suivant permet d'invalider le pool actuellement utilisé par le contrôleur de domaine.
$Domain = New-Object System.DirectoryServices.DirectoryEntry
$DomainSid = $Domain.objectSid
$RootDSE = New-Object System.DirectoryServices.DirectoryEntry("LDAP://RootDSE")
$RootDSE.UsePropertyCache = $false
$RootDSE.Put("invalidateRidPool", $DomainSid.Value)
$RootDSE.SetInfo()
Après avoir exécuté le script et si vous essayez de créer un nouvel objet, vous risquez de rencontrer le message d'erreur suivant :
Lorsque le message d'erreur apparaît, le contrôleur de domaine a déjà envoyé une demande pour une nouvelle plage. A moins que le contrôleur de domaine disposant du rôle de maitre RID ne soit pas disponible il est fort probable que si vous cliquez une deuxième fois sur OK, l'objet sera bien créé.
Si vous exécutez à nouveau la commande précédente vous verrez que la place disponible à diminuer et commence maintenant à 4100 au lieu de 3600 auparavant.
Il est possible de modifier la taille des plages d'identifiant en modifiant le registre de Windows sur le contrôleur de domaine ayant le rôle de maitre RID.
La taille de la plage peut aller de 500 à 15000 identifiants. Lorsque la valeur «RID Block Size » est inférieure à 500, les plages distribuées sont de 500. Si la valeur est supérieure à 15000 (max), des plages de 15000 RID seront attribué aux contrôleurs de domaine. Si une valeur entre 500 et 15000 est enregistrée, la taille de la plage sera égale à la valeur saisie.
Par exemple, nous modifions la valeur avec 1000 (0x3E8 ex hexadécimal) et nous redémarrons les services de domaine sur ce DC.
Il suffit d'invalider le pool actuel sur un contrôleur de domaine et d'essayer de créer un objet, pour voir les plages disponibles changées.
Vous avez pu remarquez que là le nombre de RID disponible est limité à « 1073735723 ».
Même si c'est rare, si vous ne disposez plus d'identifiant, vous ne serez même pas en mesure d'effectuer une migration ADMT vers un autre domaine. En effet pour migrer il vous faut créer une approbation avec le nouveau domaine ce qui nécessite un identifiant.
A partir de Windows 2012, il est possible de doubler la plage des identifiants disponibles.
N'effectuez pas la modification suivante sur votre environnement en production, si elle n'est pas nécessaire et si vous disposez d'un nombre suffisant d'identifiants. Des problèmes de compatibilité peuvent exister et l'opération est IRREVERSIBLE. |
Pour cela ouvrez « ldp.exe » sur le maître RID. Cliquez sur « connexion » puis sur « connecter ».
Ensuite sur liaison en tant qu'administrateur du domaine.
Cliquez sur « Parcourir », puis sur « modifier ». Vérifiez que le « DN » est vide.
Saisissez l'attribut « SidCompatibilityVersion » et la valeur « 1 », puis opération « ajouter ».
Sélectionnez « synchrone » et « étendu » puis cliquez sur « Exécuter »
Si l'opération s'est bien déroulée, le résultat suivant devrait être affiché :
***Call Modify...
ldap_modify_ext_s(Id, '(null)',[1] attrs, SvrCtrls, ClntCtrls);
modified "".
En vérifiant la plage des identifiants disponibles, vous constaterez que le maximum est maintenant de « 2147477047 ».
Vous pouvez consulter l'article suivant pour plus d'informations :
https://docs.microsoft.com/fr-fr/windows-server/identity/ad-ds/manage/managing-rid-issuance