Permissão do usuário MySQL no procedimento armazenado

8

Eu criei um procedimento armazenado simples:

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)

Mas não conseguiu executá-lo:

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

É possível que meu nome de usuário seja uma string vazia? Como crio usuários e concedo privilégios? Posso conceder a um usuário todos os privilégios em todas as entidades em um banco de dados?

Adam Matan
fonte

Respostas:

3

Como a própria mensagem de erro diz que o usuário não tem as permissões de execução.

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

Você precisa conceder a permissão de execução a esse usuário. Para isso, é necessário fazer login como usuário root e conceder a permissão como

 grant execute on db.* to user@localhost;

Para suas outras consultas:

  1. Sim É possível que seu nome de usuário seja uma string vazia, mas não é seguro criar usuários como este.

  2. Para criar e conceder privilégios em breve, dê uma olhada neste link.

  3. Sim, você pode conceder todos os privilégios em todas as entidades em um banco de dados . para isso, você pode executar um comando como

Efetue login como usuário root e emita um comando

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