2017-09-23 2 views
-1

In einer gespeicherten Prozedur in DB2 muss ich Informationen zu Benutzergruppen nachschlagen. DB2 hat hierfür keine integrierte Funktionalität, daher scheint es, dass ich hierfür eine benutzerdefinierte Funktion oder eine benutzerdefinierte Prozedur schreiben muss. In der Praxis muss das Java geschrieben sein.Auflisten von Benutzergruppen in Java

Also, in Java: Wie kann ich abfragen, aus welchen Gruppen ein Benutzer Mitglied ist, wie vom Betriebssystem aus gesehen? Alternativ: Wenn Sie einen Gruppennamen vergeben, erhalten Sie eine Liste mit Benutzernamen für Gruppenmitglieder.

Der Ansatz muss auf Linux funktionieren (es wäre nett, wenn es Betriebssystem Agnostic wäre, aber das ist nicht wichtig).

Der Ansatz muss alle Autorisierungsintegrationen berücksichtigen, die im Betriebssystem konfiguriert sind. Mit anderen Worten: Wenn das Betriebssystem für die Verwendung von SSSD zur Benutzerautorisierung eingerichtet wurde, sollte der Java-Code nicht darauf angewiesen sein, Gruppenmitgliedschaften in der/etc/group zu finden.

Also ich möchte in der Lage sein, das Äquivalent des Linux Shell-Befehls "id USERNAME" oder "getent group GROUPNAME" von Java zu tun. Python hat das Modul "grp" für diese Art von Aufgabe, aber ich habe noch nichts Ähnliches für Java gefunden.

Vorzugsweise sollte sich die Lösung auf so wenige externe Bibliotheken wie möglich stützen. Es wäre am besten, wenn es nur auf APIs zurückgreifen würde, die Teil einer einigermaßen modernen JRE sind.

+1

Sorry, falsche Sprache. Java versucht plattformunabhängig zu sein, also kümmert es sich nicht um solche Dinge. Google kann jemanden aufstellen, der etwas implementiert hat, das Ihnen hilft. –

+2

Sie können einen Systembefehl von Java ausführen und die Ausgabe parsen. – Henry

+0

John: Ich muss Java dafür verwenden. Bitte sagen Sie mir nicht zu Google; Es gibt einen Grund, warum ich die Frage gestellt habe: Google hat nichts Nützliches ergeben. –

Antwort

1

Es gibt keine "saubere" Möglichkeit, dies in Java zu tun. Java verfügt über keine Standard-APIs zum Auflisten der Benutzergruppen. Ihre Optionen wäre:

  • eine native Bibliothek Wrapper implementieren, die die getgroups C-Library-Methode aufgerufen, und es dann über JNI oder JNA
  • Verwendung java.lang.Process von Java rufen ein externes Programm aufrufen zu erhalten die Informationen
  • Abfrage LDAP oder Kerberos/AD oder JNDI von Java

die letzten funktioniert nur, wenn das System LDAP/Kerberos/JNDI verwendet, und Sie haben die entsprechenden Anmeldeinformationen, Schema configs und so weiter. Dies macht dies möglicherweise der schwierigste Ansatz ... und in der Praxis ebenso wie nicht tragbar wie die anderen Ansätze.

+0

Vielen Dank für die präzise Antwort.Ich muss vielleicht eher auf C als auf Java schreiben, obwohl ich eine verwaltete Sprache bevorzugen würde, obwohl es eine Reihe von Problemen in Bezug auf die Bereitstellung mit sich bringt. –