Announcement

Collapse
No announcement yet.

zeilenspezifische Brechtigung

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

  • zeilenspezifische Brechtigung

    Hallo,
    ich habe Forum und Inet durchsucht, finde aber keine Aussagen zu meinem Problem - vielleicht fehlen mir aber auch nur die richtigen Suchwörter.

    Also: gibt es in MYSQL (5.1.) die Möglichkeit, bestimmten Usern Zugriff nur auf bestimmte, definierte ZEILEN einer Tabelle zu gewähren (also z.B. nur auf solche, die seine User-ID enthalten)? Ich möchte nämlich nicht unbedingt für jeden User eigene Tabellen anlegen- was ansonsten wohl die einzige Lösung wäre. Als (Wieder-)Einsteiger in (my-)SQL weiß ich, dass Berechtigungen für Tabellen als Ganzes bzw für einzelne Spalten vergeben werden können.

    Ein Link zu entsprechender Doc würde schon reichen, oder aber die Aussage, dass es eben nicht geht...
    Seitdem ich einen Computer habe, kann ich Probleme lösen, die ich vorher nicht hatte.

  • #2
    Ich hätte als Vorschlag:

    Es gibt einen Admin Benutzer der alle Tabellen ändern darf. Die einzelnen Benutzer bekommen nur Views auf die Daten die sie sehen dürfen. Das heisst die Benutzer greifen gar nicht auf die Admin Tabellen zu, sondern immer auf die Views.

    Allerdings weiss ich nicht ob man in MySQL Daten zu Views hinzufügen kann. In Oracle ist dies möglich.

    Comment


    • #3
      Originally posted by fanderlf View Post
      Ich hätte als Vorschlag:

      Es gibt einen Admin Benutzer der alle Tabellen ändern darf. Die einzelnen Benutzer bekommen nur Views auf die Daten die sie sehen dürfen. Das heisst die Benutzer greifen gar nicht auf die Admin Tabellen zu, sondern immer auf die Views.

      Allerdings weiss ich nicht ob man in MySQL Daten zu Views hinzufügen kann. In Oracle ist dies möglich.
      Danke für die Antwort.

      Views gibts auch in MYSQL, allerdings ist meines Wissens neben der Berechtigung für die Views (in Mysql) auch Vorraussetzung, dass sich diese nur auf solche Tabellen (und Spalten) beziehen, für die der User ebenfalls die Berechtigung hat - Problem bleibt also dasselbe, solange es keine zeilenspezifischen Berechtigungen gibt. Außerdem sollen die User nicht nur sehen sondern auch ändern können (was mit Views IMHO schlecht möglich ist), und hätten somit auch Zugriff auf die Daten andere User, was ich eben verhindern möchte. Vielleicht weiß ja noch jemand was, ansonsten werde ich wohl kurzerhand für jeden User eigene Tabellen anlegen.
      Seitdem ich einen Computer habe, kann ich Probleme lösen, die ich vorher nicht hatte.

      Comment


      • #4
        Ich glaube nicht, dass es sowas gibt.
        Wäre aber interessant, das mal zu versuchen.

        Wenn man z.B. in der Zeile ein oder mehrere Passwörter unterbringt die der Abfragende eingeben muss, wäre das ein Schritt.

        Comment


        • #5
          Originally posted by mars View Post
          Danke für die Antwort.

          Views gibts auch in MYSQL, allerdings ist meines Wissens neben der Berechtigung für die Views (in Mysql) auch Vorraussetzung, dass sich diese nur auf solche Tabellen (und Spalten) beziehen, für die der User ebenfalls die Berechtigung hat - Problem bleibt also dasselbe, solange es keine zeilenspezifischen Berechtigungen gibt. Außerdem sollen die User nicht nur sehen sondern auch ändern können (was mit Views IMHO schlecht möglich ist), und hätten somit auch Zugriff auf die Daten andere User, was ich eben verhindern möchte. Vielleicht weiß ja noch jemand was, ansonsten werde ich wohl kurzerhand für jeden User eigene Tabellen anlegen.
          Also in Oracle kann man in EINFACHEN Views schon Daten hinzufügen oder editieren. Wobei ich das auch nicht empfehlen würde

          Du hast natürlich Recht dass der Benutzer der eigentlich nur die Views sehen sollte wieder Zugriff auf die vollen Tabellen hat. Das hab ich in meiner Leichtfertigkeit wieder zu schnell hin getippt

          Ich denke rein auf Datenbank/SQL Ebene ist so etwas sehr schwer zu lösen. Was ich mir evtl. vorstellen könnte:

          Jeder Benutzer bekommt seine eigene Tabelle. Dann gibt es andere Benutzer die Zugriff auf diese Tabellen haben. Dieser Benutzer stellt dann ein View bereit welches alle Daten der Tabellen der anderen Benutzer bereitstellt.

          Allerdings ist die Struktur dann redudant und es Bedarf einem gewissen Pflegeaufwand.
          In dem View kann man dann natürlich nicht editieren, nur lesen weil man dort ja nicht mehr weiss von welchem Benutzer welche Daten stammen.

          So in der Art:

          [highlight=sql]
          --Daten von Benutzer1 Abfragen
          SELECT *
          FROM Benutzer1.DatenTabelle

          --Daten von Benutzer2 Abfragen
          SELECT *
          FROM Benutzer2.DatenTabelle

          --Daten von allen Benutzern Abfragen
          SELECT *
          FROM Benutzer1.DatenTabelle
          UNION ALL
          SELECT *
          FROM Benutzer2.DatenTabelle
          [/highlight]

          Das hat auch den Vorteil, dass jeder Benutzer nur seine Daten editieren kann. Wenn natürlich andere Benutzer auch schreibend auf Daten eines Benutzers zugreifen ist das eher nicht möglich.

          Ich denke ich würde so etwas eher im Programm realisieren, als mir da in der Datenbank alles mögliche verbiegen zu müssen, nur damit es dann doch nicht richtig funktioniert.

          Comment


          • #6
            Das was Du machen möchtest nennt sich Row level Security und wir meines Wissens nach von mysql nicht angeboten.

            Hier ist eine Anleitung wie man sich das selbst bauen kann bin mir aber nicht sicher ob Dir das hilft.

            Versteh ich das richtig, dass Deine User direkt auf die DB zugreifen und dort machen was ihnen gefällt ohne das eine Anwendung dazwischen ist? Falls eine AW dazwischen steht ist es Fache dieser AW ein Zugriffskonzept zu implementieren.

            Möchtest Du eine DB mandantenfähigmachen ist das auf DB Ebene mit mysql ,zumindest aktuell, wohl nicht möglich.

            Dim
            Zitat Tom Kyte:
            I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

            Comment


            • #7
              Originally posted by dimitri View Post
              Das was Du machen möchtest nennt sich Row level Security und wir meines Wissens nach von mysql nicht angeboten.

              Versteh ich das richtig, dass Deine User direkt auf die DB zugreifen und dort machen was ihnen gefällt ohne das eine Anwendung dazwischen ist? Falls eine AW dazwischen steht ist es Fache dieser AW ein Zugriffskonzept zu implementieren.
              Dim
              Ah, habe ich mir doch gedacht, dass es für sowas einen Namen gibt. Row Level Security, nicht schlecht.

              Doch, es ist eine .jsp-Webanwendung dazwischen, der DB-Zugriff erfolgt aus Java-KLasssen, die im Tomcat laufen. Die AW zeigt dem einzelnen User natürlich auch nur diejenigen Daten, die für ihn erlaubt sind, bzw. läßt ihn nur diese ändern.

              Vielleicht bin ich ja etwas paranoid, ich frage mich nur, wie sicher das ist. Denn hat nicht prinzipiell jeder User mittels seiner eigenen Zugriffsrechte dann trotzdem (also unter Umgehung der AW) theoretisch Zugriff auf die Daten aller anderen User? Die (vielleicht blöde?) Frage ist also wohl eher: wie sicher sind die in der Java-Zugriffsklasse gespeicherten Daten über meine DB (also Name der DB, Ort, im "schlimmsten" Fall sogar in der Klasse abgelegte Admin-Rechte? Sollte mich vielleicht nochmal in der jsp/Java-Ecke umschauen.
              Seitdem ich einen Computer habe, kann ich Probleme lösen, die ich vorher nicht hatte.

              Comment

              Working...
              X