«

»

Rekursive/zirkuläre Gruppenbeziehungen finden (direkt in DB)

AD-Abfrage

Zirkuläre Beziehungen in AD-Gruppen direkt aus der Datenbank auslesen

Gruppe-A ist Mitglied von Gruppe-B und die ist wieder Mitglied von Gruppe-A – das wird schnell zum Problem. Man wundert sich warum die Anmeldung für User sehr lange dauert. Das kann ein Problem sein.

Was mit Bordmitteln nicht möglich ist, kann mit migRaven einfach gefunden werden.

1. Rekursionsgruppen anzeigen

Mit  http://localhost:7474/browser/  im Browser rufen wir unsere Console auf. Folgenden Befehl übertragen wir in die Console.

MATCH (n {type:"group"}) with collect(n) as n unwind n as gruppen match p=gruppen-[:rel_member*..]->gruppen
RETURN length(p) as Anzahl, gruppen.name as Gruppe, extract(x in nodes(p) |x.name) as Rekursionsgruppen;

 

(Bei der Fehlermeldung:   Invalid input ‚”’….  sind die Anführungszeichen bei {type:“group“} zu überschreiben.)

Die Abfrage kann direkt in der Datenbankoberfläche ausgeführt werden:

http://localhost:7474/browser/

Cypher_rekursive_gruppen

Im Ergebnis der Abfrage findet man die Größe der Schleife in der ersten Spalte, in der zweiten Spalte die Gruppe, die sich in der Rekursion befindet und in der dritten Spalte alle Gruppen, die sich in der Schleife befinden:

 

Anzahl Gruppe Rekursionsgruppen
2 8m_dl_firma01_rechte_modifyplus_mx 8m_dl_firma01_rechte_modifyplus_mx, 8m_dl_firma01_rechte_li, 8m_dl_firma01_rechte_modifyplus_mx
3 8m_dl_firma01_rechte_modifyplus_mx 8m_dl_firma01_rechte_modifyplus_mx, 8m_dl_firma01_rechte_li, 8m_dl_firma01_rechte_modifyplus_mx, 8m_dl_firma01_rechte_modifyplus_mx
1 8m_dl_firma01_rechte_modifyplus_mx 8m_dl_firma01_rechte_modifyplus_mx, 8m_dl_firma01_rechte_modifyplus_mx
3 8m_dl_firma01_rechte_modifyplus_mx 8m_dl_firma01_rechte_modifyplus_mx, 8m_dl_firma01_rechte_modifyplus_mx, 8m_dl_firma01_rechte_li, 8m_dl_firma01_rechte_modifyplus_mx
2 8m_dl_firma01_rechte_li 8m_dl_firma01_rechte_li, 8m_dl_firma01_rechte_modifyplus_mx, 8m_dl_firma01_rechte_li
3 8m_dl_firma01_rechte_li 8m_dl_firma01_rechte_li, 8m_dl_firma01_rechte_modifyplus_mx, 8m_dl_firma01_rechte_modifyplus_mx, 8m_dl_firma01_rechte_li

2. Nur Rekursionsgruppen mit expliziten Berechtigungen anzeigen

Mit dieser Abfrage werden nur die Rekursionsgruppen angezeigt, die Berechtigungen auf gescannte Verzeichnisse haben. Dazu wird das Verzeichnis, auf das die Gruppe explizite Rechte hat, und natürlich das Recht angezeigt.

MATCH (n {type:"group"}) WITH COLLECT(n) AS n UNWIND n AS gruppe
MATCH p=gruppe-[:rel_member*..]->gruppe<-[:rel_ace]-(ace)-[rel_right0 {explicit:1}]->(path)
RETURN LENGTH(p)-2 AS Anzahl, gruppe.name AS Gruppe,CASE
WHEN ace.ace = "278" or ace.ace = "1048854" THEN "write"
WHEN ace.ace = "131209" or ace.ace= "1179785" THEN "read"
WHEN ace.ace = "131241" or ace.ace ="1179817" THEN "read + execute"
WHEN ace.ace = "131487" or ace.ace= "1180063" THEN "read + write"
WHEN ace.ace = "131519" or ace.ace= "1180095" THEN "read, execute + write"
WHEN ace.ace = "1245631" or ace.ace= "197055" THEN "modify"
WHEN ace.ace = "1180159" THEN "modify plus"
WHEN ace.ace = "2032127" THEN "fullcontrol"
WHEN ace.ace = "65536" THEN "delete"
ELSE "Special Permission" END AS Permission, path.path AS Path, EXTRACT(x in nodes(p) | x.name) as Rekursionsgruppen

Das Ergebnis könnte so aussehen:

 

Anzahl Gruppe Permission Path Rekursionsgruppen
13 feuerwehr_g read + execute \\NB-DELL6400\Firma31\Anwendungen\Ebene_2\Ebene_3\Ebene_4 [feuerwehr_g, elektrik_g, datenverarbeitung_g, controlling_g, bestellwesen_g, ankauf_g, marketing_g, logistik_g, konstruktion_g, juristen_g, it_g, hausmeister_g, geschäftsführung_g, feuerwehr_g]
13 feuerwehr_g modify \\NB-DELL6400\Firma31\Anwendungen\Feuerwehr [feuerwehr_g, elektrik_g, datenverarbeitung_g, controlling_g, bestellwesen_g, ankauf_g, marketing_g, logistik_g, konstruktion_g, juristen_g, it_g, hausmeister_g, geschäftsführung_g, feuerwehr_g]