Ergebnis 1 bis 5 von 5

Thema: Anfängerfrage: Wie Tabellenrechte setzen?

  1. #1
    cfi
    cfi ist offline Neuer Benutzer
    Registriert seit
    24.07.2008
    Beiträge
    24

    Standard Anfängerfrage: Wie Tabellenrechte setzen?

    Hallo,

    ich bin neu bei PgSQL und habe auch allgemein noch nicht viel mit Benutzerverwaltung in DB's gemacht, deshalb habe ich keine Ahnung wie ich das angehen soll, und in der Manual hab ich, wahrschinlich mangels richtigem Suchansatz, auch nichts gefunden...

    Habe folgendes Scenario:
    1 Datenbank
    1 User-/Rollentabelle wo die User inkl. deren Rolle/Rechte gespeichert werden (Rechte/Rollen werden aber wahrscheinlich in eine 2. Tabelle ausgelagert, da ein User mehrere haben kann)
    x Datentabellen wo bestimmte User auf allen lesen & schreiben, andere User auf allen lesen aber nur bestimmte schreiben dürfen sollen

    Was muss ich jetzt machen, um das zu bewerkstelligen?
    Habe wie gesagt keine Ahnung, wo ich da Anfangen soll bzw. nach was ich suchen muss. Ich habe zwar gefunden, wie ich DB-User anlege, aber nicht, wie ich bestimmten Tabellen "Userrechte" zuordne.

    Gibt es auch ein "write-only"-Recht, also das ein User nur schreiben, aber nicht ändern darf?
    Kann ich es irgendwie machen, dass ein User eine Tabelle nicht lesen kann, aber eine StoredProcedure ausführen darf, welche in dieser Tabelle liest? Also z.b. darf ein User die Usertabelle nicht lesen, aber die StoredProcedure CheckUser(USername,Password) aufrufen, welche in der Usertabelle nachsieht, ob es den User gibt.

    mfg
    cfi
    Geändert von cfi (26.08.2008 um 10:33 Uhr)

  2. #2
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Wirf doch mal einen Blick auf GRANT und REVOKE.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  3. #3
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von cfi Beitrag anzeigen


    Kann ich es irgendwie machen, dass ein User eine Tabelle nicht lesen kann, aber eine StoredProcedure ausführen darf, welche in dieser Tabelle liest? Also z.b. darf ein User die Usertabelle nicht lesen, aber die StoredProcedure CheckUser(USername,Password) aufrufen, welche in der Usertabelle nachsieht, ob es den User gibt.

    mfg
    cfi
    Neben dem, was ads schon schrieb: für functions gibt es Parameter security definer z.B.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  4. #4
    symbiont ist offline Erfahrener Benutzer
    Registriert seit
    17.03.2008
    Ort
    NULL
    Beiträge
    1.320

    Standard

    Zitat Zitat von cfi Beitrag anzeigen
    Hallo,

    ich bin neu bei PgSQL und habe auch allgemein noch nicht viel mit Benutzerverwaltung in DB's gemacht, deshalb habe ich keine Ahnung
    das macht nix .. auch wenn man nicht mehr neu ist muss man keine ahnung haben
    Zitat Zitat von cfi Beitrag anzeigen
    wie ich das angehen soll, und in der Manual hab ich, wahrschinlich mangels richtigem Suchansatz, auch nichts gefunden...
    du schreibst, dass du auch noch eine "eigene nutzerverwaltung" implementieren moechtest ... also user und rollen/gruppen in tabellen - so gehe ich i.d.R. auch vor, wenn man privilegien auch für funktionen der anwendung abbilden moechte .. man sollte diese aber ein "klein wenig" von denen der DB unterscheiden.

    wie AK schon schrieb, gibt es da die Kommandos GRANT und REVOKE ... außerdem solltest du dir CREATE [LOGIN] ROLE anschauen mit denen du auf einem DB-Server !!! User und Rollen erzeugst - wichtig -> diese gelten für ALLE DBs die der Server bereitstellt - also nicht nur für eine DB - sie werden auch bei einem DB-Backup (hoffentlich erzaehl ich jetzt keinen mist) nicht mit gesichert.

    Also .. im Prinzip legst du mit CREATE [LOGIN] ROLE dir Nutzer beziehungsweise Rollen an .. Bei der Vergabe von Privilegien unterscheidet PG nicht zwischen einem Nutzer und einer Rolle .. eine Rolle kann sich halt nicht anmelden. Wenn du die DB aufbaust (Modell), empfielt es sich eigentlich immer wenigstens eine (Gruppen-)Rolle zu erzeugen, und eine (Login-)Rolle die Mitglied dieser Gruppe ist.

    Für Jedes Objekt (DB, Schema, Table, Funktion ...) solltest du dann dieser (Gruppen-)Rolle gleich alle Rechte einräumen die sie benötigt um die Gewünschte Funktion auszuführen. Da die Login-Rolle Mitglied der Gruppe ist, darf sie natürlich all das was der Gruppe erlaubt ist.

    Wenn du dir GRANT für Tables anschaust, wirst du feststellen, dass nach GRANT die klassichen Operationen angegeben werden koennen, die du erlauben moechtest - also SELECT, UPDATE, DELETE, INSERT .. selbstverfreilich erlaubt ein GRANT INSERT ON table ausschliesslich ein INSERT auf der table.

    Für andere Objekte wie DB, SCHEMA, ... kann es andere Operationen geben die man erlauben kann .. das ist aber alles in der Doku für GRANT beschrieben - REVOKE funktioniert ähnlich und entzieht die Rechte ..

    Zu deiner User-/Rollen-Tabelle .. also ich hab dafuer ein Frontend, was im prinzip nix weiter macht als diese Tabellen wie üblichen Stammdaten Tabellen zu fuellen und bei einem INSERT UPDATE oder DELETE entsprechende CREATE ROLE bzw. GRANT und REVOKE statements für die User abzusetzen ... wenn ich also einen User erzuege, dann wird der einfach mit CREATE ROLE auf dem PG-Server erzeugt und mit GRANT zum Mitglied der o.g. "Default Role" gemacht.

    Du solltest Dir diesen Schritt aber überlegen .. es ist nicht immer gewünscht, dass Solchen Anwendungs-Benutzer auch noch eine Login-Rolle für den DB-Server erhalten .. obwohl ich das als etwas "professioneller" empfinde.

  5. #5
    cfi
    cfi ist offline Neuer Benutzer
    Registriert seit
    24.07.2008
    Beiträge
    24

    Standard

    Danke, an euch, für die schnellen Antworten.

    @symbiont: Genau so wie du es beschrieben hast, möchte ich es machen (die Usertabelle soll eben auch Privilegien für die Anwendung speichern).

    Das mit GRANT/REVOKE ist mir jetzt klar, aber in das mit den securty definer bei stored procedures mus ich mir noch anschauen, aber jetzt weis ich wo(nach) ich suchen muss...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum