Tags:
create new tag
, view all tags

KOF-Datenbankzugriff als nethz-Service

Ausgangslage

Die KOF (Konjunktur-Forschungsstelle) betreibt eine Oracle-DB. Mitarbeiter greifen mit R-Studio (IDE für die Programmiersprache R) direkt auf die Oracle-DB zu, etwa so wie Eclipse einen direkten DB-Zugriff ermöglicht. Das Problem ist hierbei, dass alle Mitarbeiter mit demselben DB-User auf die Datenbank zugreifen und es nicht ersichtlich ist, wer welche Daten sieht. Der Zugriff soll daher personalisiert und mit dem nethz-Service System verknüpft werden, damit keine eigene Userverwaltung notwendig ist.

Oracle mit Roles und User

Der Zugriff auf sämtliche Oracle-Objekte wird durch User und Rollen abgebildet. Berechtigungen (privileges) auf bestimmte Objekte (z.B. Tabellen oder Funktionen) werden durch den Befehl grant an Rollen oder User erteilt. Durch denselben Befehl werden Rollen den Usern zugeteilt. Der Befehl revoke macht das Umgekehrte. Eine zusätzliche Option, die sog. grant option legt fest, ob ein bestimmtes Privileg oder eine bestimmte Rolle weitervererbt werden kann.

nethz-Service

Für die Rechteverwaltung soll ein eigener nethz-Service erstellt werden. Dazu müssen folgende Voraussetzungen auf Seite KOF erfüllt sein:

  • ein privilegierter User muss auf der KOF-DB existieren, z.B. nethz_admin
  • es müssen Rollen definiert sein, die den Zugriff auf Tabellen, Views und andere DB-Objekte ermöglichen
  • nethz_admin muss neue User erstellen, löschen und deren Passwort setzen können
  • nethz_admin muss dedizierte Rollen bekommen, die er weitervererben darf ( with grant option )
  • die Befehle, die der nethz_admin User absetzen kann (siehe unten) müssen auf der KOF-DB vorgängig getestet werden

Auf Seite nethz Admin-Tool sind folgende Arbeiten erledigt:

  • DONE neuer nethz-Service mit separatem Passwort
  • DONE DB-Zugriff auf KOF-Datenbank
  • DONE Absetzen der entsprechenden Oracle-Befehle
    • Auslesen der verfügbaren Rollen (grantable roles)
    • User in KOF-DB erstellen (create user)
    • User in KOF-DB löschen (delete user)
    • Passwort für KOF-DB-User setzen (set password)
    • Rollen einem KOF-DB-User erteilen (grant role xy to user)
    • Rollen einem KOF-DB-User entziehen (revoke role xy from user)
    • User in KOF-DB sperren und entsperren
  • Integrations-Tests
  • DONE Web-GUI für die Detail-Verwaltung (Zuteilung von Rollen zu Usern)
  • DONE Web-GUI für die Übersicht (welcher User hat welche Rollen zugeteilt)
  • Service darf nur Mitarbeitern erteilt werden
  • Wenn ein Mitarbeiter nicht mehr angestellt ist aber die ETH noch nicht verlässt, läuft der Service trotzdem ab

Implementationsdetails

  • auf der KOF Datenbank existiert ein privilegierter User NETHZ_ADMIN, welcher User erstellen sowie gewisse Rollen vererben kann
  • im Modul Service::KOF sind alle für den Service notwendigen Prozeduren abgelegt, wie
    • check_server_up prüft, ob eine DB-Verbindung möglich ist
    • create_user erstellt auf Oracle einen neuen User CREATE USER xxx IDENTIFIED BY "xxxxx"
    • disable_user sperrt auf Oracle einen User ALTER USER xxx ACCOUNT LOCK
    • enable_user entsperrt einen User ALTER USER xxx ACCOUNT UNLOCK
    • get_service_options liest alle Rollen aus, die diesem User gegranted wurden
    • set_service_options ändert die Menge der Rollen, die dem User gegranted werden sollen. Dabei werden auch Synonyme erstellt/gelöscht sowie die Tabelle NA_USERS_ROLES nachgeführt
    • delete_user löscht einen User: DROP USER xxx DELETE CASCADE
    • set_password setzt das Passwort ALTER USER xxx IDENTIFIED BY "mein_passwort"
  • Hilfsprozeduren im Modul Service::KOF
    • get_grantable_roles Gesamtmenge aller Rollen, die erteilt werden können
    • grant_roles erteilt einem User eine Menge von Rollen und erstellt ausserdem die nötigen Synonyme auf die Views. Welche Rollen für welche Views Zugriff ermöglichen, wird aus der Tabelle NA_VIEWS_ROLES ausgelesen
    • revoke_roles macht das Umgekehrte. Ermittelt auch, welche Synonyme nicht mehr benötigt werden und löscht diese
  • kof.pl ist das Admin-Skript, welches für die Service-Erteilung verwendet wird, sowie für die Übersichtstabelle (wer hat was). Die Übersichtstabelle verwendet jQuery sowie den Tablesorter.
  • die Datenbankverbindungs-Details für den User NETHZ_ADMIN sind in der Konfigurationsdatei in der Sektion [KOF] abgelegt

Aufwandschätzung

Für die Implementation dieses KOF nethz-Services wurden mit etwa 3-4 Arbeitstagen gerechnet, sofern keine grösseren, unvorhergesehenen Probleme auftreten. Dieses Budget wurde leider etwas überzogen, es wurden insgesamt etwa 5 Arbeitstage aufgewendet.

Da geplant ist, die KOF Datenbank auf Postgres zu migrieren und Postgres in vielen Bereichen sehr ähnlich wie Oracle funktioniert, können diese Arbeiten relativ leicht auf einen neuen KOF-Postgres-Service übertragen werden.

-- SwenVermeul - 2013-01-17

Topic revision: r4 - 2013-04-18 - vermeul
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback