MySQL-Benutzerberechtigung für gespeicherte Prozeduren

8

Ich habe eine einfache gespeicherte Prozedur erstellt:

mysql> CREATE FUNCTION hello (s CHAR(20))
    -> RETURNS CHAR(50) DETERMINISTIC
    -> RETURN CONCAT('Hello, ',s,'!');
Query OK, 0 rows affected, 1 warning (0.00 sec)

Aber konnte es nicht ausführen:

mysql> SELECT hello('world');
ERROR 1370 (42000): execute command denied to user ''@'localhost' for routine 'test.hello'

Ist es möglich, dass mein Benutzername eine leere Zeichenfolge ist? Wie erstelle ich Benutzer und erteile Berechtigungen? Kann ich einem Benutzer alle Berechtigungen für alle Entitäten in einer Datenbank gewähren?

Adam Matan
quelle

Antworten:

3

Da die Fehlermeldung selbst besagt, dass der Benutzer nicht über die Ausführungsberechtigungen verfügt.

mysql> SELECT hello('world');
ERROR 1370 (42000): execute command denied to user ''@'localhost' for routine 'test.hello'

Sie müssen diesem Benutzer die Ausführungsberechtigung erteilen. Dazu müssen Sie sich als Root anmelden und die Berechtigung als erteilen

 grant execute on db.* to user@localhost;

Für Ihre anderen Fragen:

  1. Ja Es ist möglich, dass Ihr Benutzername eine leere Zeichenfolge ist, aber es ist nicht sicher, die Benutzer so zu erstellen.

  2. Informationen zum Erstellen und Gewähren von Berechtigungen finden Sie in Kürze unter diesem Link.

  3. Ja, Sie können alle Berechtigungen für alle Entitäten in einer Datenbank gewähren . Dazu können Sie einen Befehl wie ausführen

Melden Sie sich als Root an und geben Sie einen Befehl ein

GRANT ALL ON DB_NAME.* TO 'USER'@'HOST' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
Abdul Manaf
quelle