Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Active Directory GruppenID (https://www.delphipraxis.net/104438-active-directory-gruppenid.html)

cst_07 4. Dez 2007 11:10


Active Directory GruppenID
 
Hi,

leider bin ich auch nach langem Suchen in den Foren nicht so richtig fündig geworden und dachte, dass ihr mir vielleicht weiterhelfen könnt. Es geht um das Auslesen von Active Directory Benutzern und Gruppen. Die Daten kann ich bereits auslesen. Doch an welchem Merkmal kann ich die Gruppen eindeutig identifizieren. Ich finde einfach keine GruppenID. Gibt es diese nicht? Weiß vielleicht jemand, wie ich an die GruppenID komme, bzw. wie ich diese auslesen kann, oder gibt es ein anderes Merkmal wie ich eine Gruppe eindeutig identifizieren kann, vielen Dank!!!!! :)

Vielleicht mach ich das ja auch falsch :wall:


Codestückchen Gruppen auslesen :gruebel:
-----------------------------------
...
if UseOpenObject then
ADsOpenObject('WinNT://' + Domain + '/' + lvADGroupList.Selected.Caption, UserName, Password, 1, IADsGroup, grp)
else
ADsGetObject('WinNT://' + Domain + '/' + lvADGroupList.Selected.Caption, IADsGroup, grp);

Assert(grp <> nil);
edtGroupname.Text := grp.Name;
edtDescription.Text := grp.Description;
...


Ich würde mich freuen, wenn mir jemand weiterhelfen könnte!!!!!!!!!!
Vielen Dank schon mal im Voraus!!!

generic 4. Dez 2007 11:37

Re: Active Directory GruppenID
 
Jedes Objekt User, Gruppe oder Computer habt eine SID.
SID steht für Security Identifier.
Diese sind weltweit eindeutigt, es sein denn das Konto ist ein wellknown Objekt.
Diese habe statische SID's (z.B. "Jeder").


edit:
Willkommen in der DP.

cst_07 4. Dez 2007 12:05

Re: Active Directory GruppenID
 
Liste der Anhänge anzeigen (Anzahl: 1)
Vielen Dank!
Hab auch erst vor 3 Monaten mit Delphi angefangen. Macht aber riesen Spaß!

Soweit so gut ;)

Ich weiß nicht wie ich über das Objekt an die SID komme. Es steht nicht in der Objekt-Eigenschaften-Auswahl zur Verfügung :gruebel:

marabu 4. Dez 2007 12:20

Re: Active Directory GruppenID
 
Hi,

für mich wäre ADsPath das eindeutige Merkmal, alternativ GUID.

Grüße vom marabu

cst_07 4. Dez 2007 12:42

Re: Active Directory GruppenID
 
Der ADsPath kann leider nicht verwendet werden. Wenn sich der Gruppenname ändert, ändert sich auch der Pfad, somit ist eine eindeutige Zuordnung nicht mehr möglich. :(
Die GUID ist die identifizierung des Interfaces und nicht der Gruppe, somit leider immer gleich.

GUID: {27636B00-410F-11CF-B1FF-02608C9E7553}

generic 4. Dez 2007 13:06

Re: Active Directory GruppenID
 
mit dem LDAP Provider habe ich in einen sehr alten Projekt das GUID so ausgelesen:
Delphi-Quellcode:
  if Succeeded(disp.QueryInterface(IID_IADsUser, userI)) then
  begin
    try
      str_guid:=useri.GUID;
      HexToBin(@str_guid[1], @guid, SizeOf(guid));
      Bearbeiter.str_Guid:=GUIDToString(guid);
    except
    end;
  end;
imho was das die objectguid und nicht die auf dem interface.

marabu 4. Dez 2007 13:40

Re: Active Directory GruppenID
 
Hier noch eine kleine Lesehilfe:

PSDK on IADsGroup.ADsPath
The ADsPath string of this object. The string uniquely identifies this object in a network environment. The object can always be retrieved using this path.


PSDK on IADsGroup.GUID
The globally unique identifier of the directory object. The IADs interface converts the GUID from an octet string, as stored on a directory server, into a string format.

Freundliche Grüße

cst_07 4. Dez 2007 15:48

Re: Active Directory GruppenID
 
Auch diese Information hat nicht wirklich geholfen. Stehe nach wie vor noch vor dem selben Problem, die Gruppe nicht eindeutig identifizieren zu können.

marabu 4. Dez 2007 15:58

Re: Active Directory GruppenID
 
Das ist schade. Ich arbeite zwar erst seit wenigen Monaten im Bereich Identity Management, aber wenn du ein wenig mehr Hintergrundinformation zu deinem Problem geben kannst, dann finden wir bestimmt gemeinsam eine Lösung.

In welchem Kontext benötigst du das identifizierende Merkmal und warum darf es weder ADsPath noch GUID sein?
Du willst doch nicht etwa innerhalb von AD bestehende Abhängigkeiten extern nachbilden?

cst_07 4. Dez 2007 16:15

Re: Active Directory GruppenID
 
Danke für deine Hilfe, das nehme ich gerne an.

Ich möchte das bestehende Rechtekonzept, welches bereits in Active Directory vorliegt importieren und auch synchronisationsfähig halten. Um eine Gruppe jedoch eindeutig zuordnen zu können, benötige ich eine Art ID oder eben ein entsprechendes eindeutiges Merkmal.

Der Pfad ist sofern eindeutig, dass dieser nur einmal existiert. Aber wird die Gruppe umbenannt, ist auch der Pfad anders und somit habe ich keine eindeutige Zuordnung mehr.

Beim auslesen der GUID bekomme ich für jede Gruppe die selbe ID (ObjektID). Wie komme ich von der GUID zur GruppenID?

Das Rechtekonzept soll nicht nachgebildet werden, sondern nur ausgelesen und aktuell gehalten werden.

marabu 4. Dez 2007 18:27

Re: Active Directory GruppenID
 
ADsPath ist eindeutig, aber variabel - da hast du Recht. Momentan gehe ich nach dem Studium der verfügbaren Dokumentation zu IADs immer noch davon aus, dass die property GUID deine Anforderungen erfüllen sollte.

Wie sieht dein Code aus, der stets die GUID des Interface liefert?
Hast du das Beispiel aus Beitrag #6 mal adaptiert?
Um an die GUID zu gelangen kannst du auch das Basis-Interface IADs verwenden.

Um selbst einen Test zu machen benötige ich etwas Zeit (VPN-Tunnel einrichten, Credentials besorgen, ...), aber vielleicht kriegen wir das Problem ja durch Sichtung deines Codes hin.

cst_07 5. Dez 2007 07:58

Re: Active Directory GruppenID
 
Das Beispiel aus #6 hatte ich probiert, hat aber nicht so richtig hingenauen.

Nun der Code zum Auslesen der Gruppeninformationen:

Delphi-Quellcode:
procedure TfrmInfo.ShowGroupInfo;
var
  grp : IAdsGroup;
begin
  if UseOpenObject then
    ADsOpenObject('WinNT://' + Domain + '/' + tvAD.Selected.Text, UserName, Password, 1, IADsGroup, grp)
  else
    ADsGetObject('WinNT://' + Domain + '/' + tvAD.Selected.Text, IADsGroup, grp);
  Assert(grp <> nil);
  edtGroupname.Text := grp.Name;          // Gruppen Name
  edtDescription.Text := grp.Description; // Gruppen Beschreibung

  grp.GUID; // GUID des Interface (immer gleich)
             // GUID immer {27636B00-410F-11CF-B1FF-02608C9E7553}                                       
end;

Die dazugehörige Typlibaryinfo (vielleicht hilft das ja):
Delphi-Quellcode:
// *********************************************************************//
// Interface: IADsGroup
// Flags:    (4416) Dual OleAutomation Dispatchable
// GUID:     {27636B00-410F-11CF-B1FF-02608C9E7553}
// *********************************************************************//
  IADsGroup = interface(IADs)
    ['{27636B00-410F-11CF-B1FF-02608C9E7553}']
    function Get_Description: WideString; safecall;
    procedure Set_Description(const retval: WideString); safecall;
    function Members: IADsMembers; safecall;
    function IsMember(const bstrMember: WideString): WordBool; safecall;
    procedure Add(const bstrNewItem: WideString); safecall;
    procedure Remove(const bstrItemToBeRemoved: WideString); safecall;
    property Description: WideString read Get_Description write Set_Description;
  end;

cst_07 5. Dez 2007 14:27

Re: Active Directory GruppenID
 
Habe mich mal auf den MSDN Seiten genauer umgeschaut und bin auf folgende Info gestoßen.
Die GruppenID lässt sich bei "Globalen Gruppen" (Netapi32.dll) problemlos auslesen, aber bei "Lokalen Gruppen" nicht. :wall:

GROUP_INFO_2 Structure
The GROUP_INFO_2 structure contains information about a global group, including name, identifier, and resource attributes.
Delphi-Quellcode:
typedef struct _GROUP_INFO_2 { 
  LPWSTR grpi2_name;
  LPWSTR grpi2_comment;
  DWORD grpi2_group_id;
  DWORD grpi2_attributes;
} GROUP_INFO_2, *PGROUP_INFO_2;
LOCALGROUP_INFO_1 Structure
The LOCALGROUP_INFO_1 structure contains a local group name and a comment describing the local group.
Delphi-Quellcode:
typedef struct _LOCALGROUP_INFO_1 { 
  LPWSTR lgrpi1_name;
  LPWSTR lgrpi1_comment;
} LOCALGROUP_INFO_1,
  *PLOCALGROUP_INFO_1,
  *LPLOCALGROUP_INFO_1;
Was haben sich die MS-Entwickler bei der localgrup-definition gedacht? :gruebel:
Kaum zu glauben, wieso es hier keine ID gibt :roll:

:?: Gibt es noch eine andere Möglichkeit?? :?:

Alter Mann 5. Dez 2007 19:28

Re: Active Directory GruppenID
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ActiveDirectoryServices oder lokale Gruppen?

Folgende Aussagen beziehen sich auf LDAP://.

Da ich nicht weiß welche Möglichkeiten du hast: Du musst nach den Eigenschaften(Properties) des ADsObjects
schauen, sehr hilfreich (aber auch gefährlich) ADSIEdit.

Die in diesem Fall wichtigen Eigenschaften sind objectGIUD und primaryGroupToken bzw.
auf Mitgliedsseite primaryGroupID. (siehe Anhang)

Der Zugriff erfolgt je nach Vorgehensweise entweder über IADs direkt oder aber
über IADs->(IADS.get_schema)->IDAsClass.OptionalProperties und/oder über
IID_IDirectoryObject.GetObjectAttributes.

Welches der richtige Weg ist, weiß ich auch nicht genau, aber zum Ziel führen sie alle.

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz