Ich habe einen MySQL-Benutzer und möchte, dass NUR die gewünschten Ansichten und keine andere Tabelle in der Datenbank angezeigt werden. Ich habe diesem Benutzer Berechtigungen nur für bestimmte Ansichten wie folgt erteilt:
GRANT SHOW VIEW ON `myDatabase`.`awesome_view` TO 'thisUser'@'%'
Wenn ich eine show grants;
Anweisung mache, kann ich diese Berechtigungen nur wie erwartet sehen. Ich möchte jedoch, dass dieser Benutzer NUR die Ansichten und nicht die Tabellen abfragt, die sich auf diese Ansichten beziehen, aber ich kann keinen Weg finden, dies zu tun. Es scheint so zu sein, dass, wenn ich möchte, dass der Benutzer eine Auswahl für die Ansicht vornimmt, die Auswahl auch für die Tabelle gewährt werden muss, oder irre ich mich?
Wenn ich die select
Anweisung in den restlichen Tabellen ablehne und in der Befehlszeile versuche, eine Auswahl zu treffen, wird Folgendes angezeigt:
SELECT * FROM myDatabase.fordibenForYouTable;
ERROR 1142 (42000): SELECT command denied to user 'thisUser'@'localhost' for table 'fordibenForYouTable'
Das ist es, was ich zwar will, aber ich wurde auch abgelehnt, wenn ich die Ansichtsdaten auswähle.
Gibt es eine Möglichkeit, dem Benutzer nur die Ansichten und nicht die Tabellen zur Verfügung zu stellen?
quelle
Ich weiß, dass dies jetzt alt ist, aber hier ist, was dieses Problem für mich gelöst hat ...
Die Antwort war mit der Syntax "SQL SECURITY".
In meiner ursprünglichen Ansichtsdefinition war SQL SECURITY auf "INVOKER" eingestellt. Dies bedeutete, dass der Benutzer gezwungen war, Auswahlberechtigungen sowohl für die Ansicht als auch für die Tabelle zu haben.
Wenn ich die SQL-SICHERHEIT in "DEFINER" geändert habe, kann ich dem Benutzer nur in der Ansicht die Berechtigung zum Auswählen erteilen.
quelle