MySQL Privilegien-Problem

AfroQue

Mitglied
Hallo,

um die Verbindung zu MySQL remote zu einem Server abzusichern benutze ich neben einer SSL-Verbindung zwei Benutzerkonten: Eins um lesende Zugriffe auf eine bestimmte Tabelle zu tätigen, einen um schreibende zu tätigen.

Im speziellen sieht es so aus, dass das Benutzerkonto mit dem Lesezugriff nur den SELECT-Befehl ausführen kann. Das Benutzerkonto mit der Schreibberechtigung darf nur INSERT, UPDATE und DELETE ausführen. Jetzt habe ich aber das Problem:
Beim Ausführen eines SQL-Befehls wie z.B. folgendem:

UPDATE tabelle SET row1=val1, row2=val2, ... WHERE rowX=valX

bekomme ich die Fehlermeldung, dass der Benutzer nicht genügend Rechte besitzt. Es fehlt ihm das Recht ein SELECT-Befehl auszuführen, was ja auch so von mir gewollt ist. Der einzige Grund, wofür ich hier ein SELECT sehe ist die WHERE-Klausel.

Kann mir einer sagen, ob ich das richtig verstehe? Oder habe ich da möglicherweise mit der Rechteverteilung falsch gemacht (was nach mehrmaligen hinsehen mir jedoch nicht aufegfallen ist).
Wenn tatsächlich für die WHERE-Klausel ein Recht zur Ausführung des SELECT-Befehls notwendig ist, so stellt sich mir die Frage, ob es ein gleichwärtigen Befehl (wie oben) gibt, welcher nicht das Recht zur Ausführung eines SELECT-Befehls benötigt.

Hoffe mir kann da einer helfen.
 
Meines Wissens nach ist es ein SELECT-Befehl, da deine DB ja erst mal die Stelle suchen muss wo sie was einfügen soll. Somit Übersetzt die DB deinen Befehl in eine SELECT-Befehl,einen DELET-Befehl und einen INSERT-Befehl.
Wäre auch mal interesant was passiert wenn der Account SELECT-Rechte hat, aber keine INSERT.
Wenn du eh schon SSL benutzt, glaube ich nicht das 2 Accounts sinn machen. Sollte jemand an die Zugangsdaten für einen Account kommen, kommt er auch an die des 2.

Sollte ich komplett daneben liegen schmeißt Steine nach mir. Ich wünsche eine gute Nacht.

Dunas
 
Habe mir schon sowas gedacht. Mir fällt aber auf anhieb nicht ein welcher Befehl den oben genannten UPDATE-Befehl ersetzten würde. Ich meine wie macht man DELETE klar, dass der Datensatz, der gerade SELECTed wurde gelöscht werden soll? Oder lässt sich der obere Befehl nicht in 3 Befehle zerlegen? Und MySQL macht das intern?

Wie dem auch sei... Da es sich hier nur um eine spalte handelt, die ein Lesezugriff benötigt, habe ich nur für diese Spalte das Prevelegium SELECT gegeben. Funktioniert soweit auch.
 
Zurück