Ich habe Benutzer 'restricteduser' auf meinem MySQL Server, der 'gesperrt' ist erstellt. Die Tabelle mysql.user hat ein N für alle Privilegien für dieses Konto. Die Tabelle mysql.db enthält Y nur für Auswählen, Einfügen, Aktualisieren, Löschen, Erstellen, Löschen; Alle anderen Berechtigungen sind N für dieses Konto. Ich habe versucht, eine gespeicherte Prozedur zu erstellen und ihm dann Zugriff zu gewähren, um nur diese Prozedur auszuführen, keine anderen, aber es funktioniert nicht.Bedeutung von Execute_priv auf mysql.db Tabelle
Der Benutzer erhält: Fehler: Befehl des Benutzers restricteduser '@ '%' für Routine 'mydb.functionname'
Die gespeicherte Prozedur verweigert ausführen:
CREATE DEFINER = 'restriceduser'@'%' FUNCTION `functionname`(sIn MEDIUMTEXT, sformat MEDIUMTEXT)
RETURNS int(11)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
....
END;
Die I grant-Anweisung versucht:
GRANT EXECUTE ON PROCEDURE mydb.functionname TO 'restricteduser'@'%';
konnte ich mit
durch Änderung seiner mysql.db Eintrag arbeiten umupdate mysql.db set execute_priv='Y' where user='restricteduser'
Dies scheint mehr zu sein, als ich will, weil es Berechtigungen für ihn eröffnet, jede gespeicherte Prozedur in dieser Datenbank auszuführen, während ich nur wollte, dass er Berechtigungen zum Ausführen der designierten Funktion hat.
Kann jemand sehen, wo mein Problem liegen kann?
Die Benutzertabelle sollte definitiv nicht execute_priv = 'Y' haben. Es geht darum, den Zugang zu beschränken, ihn nicht zu erweitern. Ich sehe eine procs_priv-Tabelle, wo vermutlich dieser Zugriff erscheinen sollte, und nicht in den Benutzer- oder db-Tabellen. Ich habe diese Art von Dingen nicht festgelegt, aber die Zuschuss-Syntax sieht plausibel aus. Ich vermute, dass 'restricteduser' @ '%' nicht mit dem Eintrag in der db-Tabelle übereinstimmt, der zur Authentifizierung der Benutzerverbindung verwendet wurde? – mc0e