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?
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:
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.
Pour créer et accorder des privilèges en bref, jetez un œil à Ce lien.
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;