web-dev-qa-db-fra.com

Autorisation utilisateur MySQL sur la procédure stockée

J'ai créé une procédure stockée simple:

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)

Mais n'a pas réussi à l'exécuter:

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

Est-il possible que mon nom d'utilisateur soit une chaîne vide? Comment créer des utilisateurs et accorder des privilèges? Puis-je accorder à un utilisateur tous les privilèges sur toutes les entités d'une base de données?

8
Adam Matan

Comme le message d'erreur lui-même dit que l'utilisateur n'a pas les autorisations d'exécution.

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

Vous devez accorder l'autorisation d'exécution à cet utilisateur. Pour cela, vous devez vous connecter en tant qu'utilisateur root et accorder l'autorisation en tant que

 grant execute on db.* to user@localhost;

Pour vos autres requêtes:

  1. Oui Il est possible que votre nom d'utilisateur soit une chaîne vide mais il n'est pas sûr de créer des utilisateurs comme celui-ci.

  2. Pour créer et accorder des privilèges en bref, jetez un œil à Ce lien.

  3. Oui, vous pouvez accorder tous les privilèges sur toutes les entités d'une base de données . pour cela, vous pouvez exécuter une commande comme

Connectez-vous en tant qu'utilisateur root et lancez une commande

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