В вашем вопросе я не понимаю, почему вы используете RID для различения пользователей и групп.Объекты принадлежат к разным классам, поэтому они естественным образом различаются.
В программировании на Win32 вы можете просто использовать:
BOOL WINAPI LookupAccountSid(
__in_opt LPCTSTR lpSystemName,
__in PSID lpSid,
__out_opt LPTSTR lpName,
__inout LPDWORD cchName,
__out_opt LPTSTR lpReferencedDomainName,
__inout LPDWORD cchReferencedDomainName,
__out PSID_NAME_USE peUse
);
Этот API происходит от функций авторизации для извлечения вpeUse
если SID является пользователем или группой.
Используя .NET Framework (C #), SecurityIdentifier
может использоваться для определения, представляет ли SID действительную учетную запись домена.
Последнее, что обычно используется для различения объектов в каталоге, это атрибут objectGUID
.Этот атрибут присутствует в каждом объекте.Таким образом, вы можете получить объекты из интерфейса службы Active Directory (ADSI), используя SID или GUID
"LDAP:///<GUID={28c67c50-9778-47a4-a77a-bf56f238a0c4}>"
или
"LDAP:///<SID=S-1-5-21-500000003-1000000000-1000000003-1001>"
(отредактировано после вашего комментария) Насколько я знаюДублированный RID внутри домена рассматривается как исключение, объясняемое потерей контроллера домена, который выполняет роль хозяина Relative ID (RID).Возможно, существуют хакерские инструменты, которые могут исправлять базу данных AD для изменения SID, но я их не знаю.
Будьте осторожны , RID могут дублироваться в других доменах.Если у вас есть субдомены или другие деревья в вашем лесу, вы можете снова найти те же RID с разными суб-полномочиями (возможно, в одном и том же ACL)
Я также обнаружил дубликаты в компьютерных SID, но это было связано сплохое использование Призрака.