Announcement

Collapse
No announcement yet.

Benutzerberechtigung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Benutzerberechtigung

    Hallo Gemeinde,

    kann ich für einen Benutzer eine/mehrere Tabelle(n) so einschränken, dass er nur bestimmte Datensätze sehen kann?

    Beispiel: in den Tabellen habe ich Daten für verschiedene Mandanten, die über ein Mandantenfeld selektiert werden können.

    Nun soll der Benutzer "A" nur Datensätze des Mandanten "A" zu sehen bekommen, egal über welchen Weg er sich anmeldet (ODBC, SQLplus, .....)

    Kennt ihr da Möglichkeiten?
    Datenbank oracle 10 unter Suse

    Danke schon Mal

  • #2
    Die Tabelle enthält ein Feld, nach dem der Zugriff organisiert wird, z.B. KATEGORIE. Der Benutzer "A" sieht nicht die Tabelle, sondern eine View:
    Code:
    CREATE VIEW tab_a AS SELECT * FROM tab
         WHERE KATEGORIE="A";
    Das ganze kann auch dynamisch gestaltet werden, wenn der angemeldete Nutzer z.B. mit sys_context('USERENV','CURRENT_USER') in der View ausgelesen und in der WHERE-Klausel verwendet wird.

    Comment


    • #3
      Danke für deinen Lösungsvorschlag.

      Kann der Benutzer dann die Tabelle (z.B. bei einem ODBC-Connect) gar nicht sehen?
      Ich war bisher immer der Meinung, dass der Benutzer die Tabelle sieht, ein Select-Statement absetzt, und damit auch alle Datensätze ausgeben kann.

      Bin ich da auf dem Holzweg?

      Comment


      • #4
        Das kann man sehr genau definieren z.B.
        Code:
        GRANT  SELECT ON tab_a    TO nutzer;
        
        REVOKE SELECT ON tab_a  FROM nutzer;

        Comment


        • #5
          Danke für die Info.

          Werde mal ein wenig testen.

          Comment


          • #6
            wir haben hier ein ähnliches konzept.
            du kannst dir eine view auf die daten legen die anhand des USERS die daten einschränkt:

            select *
            from mandanten
            where namdantenname = sys_context('USERENV','CURRENT_USER');

            das funzt natürlich nur wenn der DB-Connect für jeden Mandanten anders ist.

            greetz

            Comment


            • #7
              Hallo,
              eine andere bzw. variierende Möglichkeit wäre:
              Alle Tabellen werden im Schema eines "Hauptusers", z.B. User = 'X',angelegt.
              Ich war bisher immer der Meinung, dass der Benutzer die Tabelle sieht, ein Select-Statement absetzt, und damit auch alle Datensätze ausgeben kann.
              Jeder Mandant wird als User mit eigenem Schema eingerichtet, z.B. "Mand_A" u. "Mand_B".
              mit der Useranmeldung Mand_A erstellt Du dann die View als:

              Code:
              Code:
              CREATE VIEW tab AS SELECT * FROM X.tab
                   WHERE KATEGORIE="A";
              Das hat den Vorteil, dass immer mit dem gleichen Tabellenname "tab" gearbeitet werden kann. Die Selects bleiben für Haupt- und Mandanten-User identisch usw.

              Für alle anderen Tabellen ohne Mandantenbeschränkung erstellst Du Snonyme.
              Wenn User Mand_A sich anmeldet, egal über welches Tool oder Oberfläche, sieht er immer nur "seine" bzw. die eingeschränkten Daten.

              mfg
              Michael

              Comment

              Working...
              X