Permiso de usuario MySQL en procedimiento almacenado


8

He creado un procedimiento almacenado 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)

Pero no pudo ejecutarlo:

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

¿Es posible que mi nombre de usuario sea una cadena vacía? ¿Cómo creo usuarios y otorgo privilegios? ¿Puedo otorgarle a un usuario todos los privilegios en todas las entidades dentro de una base de datos?

Respuestas:


3

Como el propio mensaje de error dice que el usuario no tiene los permisos de ejecución.

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

Debe otorgar el permiso de ejecución a ese usuario, para lo cual debe iniciar sesión como usuario root y otorgar el permiso como

 grant execute on db.* to user@localhost;

Para sus otras consultas:

  1. Sí. Es posible que su nombre de usuario sea una cadena vacía, pero no es seguro crear usuarios como este.

  2. Para crear y otorgar privilegios en breve, eche un vistazo a este enlace.

  3. Sí, puede otorgar todos los privilegios en todas las entidades dentro de una base de datos . para esto puedes ejecutar un comando como

Inicie sesión como usuario root y emita un comando

GRANT ALL ON DB_NAME.* TO 'USER'@'HOST' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.