SQL MySQL --> VIEWs --> DEFINER & SQL SECURITY Frage/Erklärung

Ghost_Rider_R

Lieutenant
Registriert
Nov. 2009
Beiträge
795
Hallo miteinander,

ich bin gerade dran mich ein wenig in VIEWs einzuarbeiten und hab dies auch schon größtenteils erfolgreich umgesetzt.
Ein paar Kleinigkeiten fehlen mir aber noch zum allgemeinen Verständnis.

1)
Es gibt die Möglichkeit folgende Syntax einzutragen:

DEFINER = {user | CURRENT_USER}
SQL SECURITY {DEFINER | INVOKER}

Was genau machen die Zeilen? müssen immer beide angegeben werden, sprich gehören Sie zusammen?

Ich hab das bis jetzt mal so verstanden, dass ich im DEFINER (erste Zeile) festlege ob der momentane User oder ein bestimmter User festgelegt wird und in der 2. Zeile dann ausgewählt wird ob die Rechte überprüft werden mit dem Konto des Invoker (Anfragers) oder dem DEFINER den man zuvor festgelegt hat. Ist das soweit richtig?

2)
Es gibt am Ende einer CREATE/ALTER Anweisung noch die Möglichkeit folgendes einzufügen:

WITH {CASCADED | LOCAL} CHECK OPTION

und bei DROP:

{RESTRICT | CASCADE}

Was genau bewirken die beiden Zeilen jeweils?


vielen Dank schonmal für eure Hilfe

viele Grüße Ruff :)
 
...den Link kannte ich schon, da hab ich das Meiste Wissen für mich rausgezogen.
Trotzdem sind die oben genannten Punkte nicht so richtig klar geworden für mich, daher auch meine Frage :)
 
1)
Es gibt die Möglichkeit folgende Syntax einzutragen:

DEFINER = {user | CURRENT_USER}
SQL SECURITY {DEFINER | INVOKER}

Was genau machen die Zeilen? müssen immer beide angegeben werden, sprich gehören Sie zusammen?

Ich hab das bis jetzt mal so verstanden, dass ich im DEFINER (erste Zeile) festlege ob der momentane User oder ein bestimmter User festgelegt wird und in der 2. Zeile dann ausgewählt wird ob die Rechte überprüft werden mit dem Konto des Invoker (Anfragers) oder dem DEFINER den man zuvor festgelegt hat. Ist das soweit richtig?


Das wär das einzige was noch zu klären wäre...
Ergänzung ()

...push

DEFINER = {user | CURRENT_USER}
SQL SECURITY {DEFINER | INVOKER}

ist immer noch nicht Klar. Bitte um Erklärung in eigenen Worten.
 
Ganz einfach, jede View hat einer, der sie erstellt, quasi als Attribut.
Mit DEFINER kannst du es entweder selbst sein, oder aber sagen, dass das ein ganz bestimmter User sein soll.
Wichtig wird das, wenn dann Rechte ins Spiel kommen. Wenn SQL SECURITY auf DEFINER steht, dann hat die View Zugriff auf alle Tabellen, auf die der DEFINER Zugriff hat, wenn du INVOKER hast, dann nur auf die des INVOKERS (also der, der die View verwendet).
Mit SQL SECURITY DEFINER hast du ein Art SUID-Bit, kannst also über die View auf eine Tabelle mit Rechten zugreifen, die du eig. gar nicht hast, also musst du da aufpassen.
 
Zurück
Oben