MySQL用户对存储过程的权限


8

我创建了一个简单的存储过程:

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)

但是无法运行它:

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

我的用户名是否可能为空字符串?如何创建用户并授予特权?我可以授予用户数据库中所有实体的所有特权吗?

Answers:


3

由于错误消息本身表明 用户没有执行权限。

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

您需要向该用户授予执行权限。为此,您需要以root用户身份登录并以

 grant execute on db.* to user@localhost;

对于您的其他查询:

  1. 是是您的用户名可能是一个空字符串,但是创建这样的用户并不安全。

  2. 要简要地创建和授予特权,请查看此链接。

  3. 是的,您可以授予 数据库内所有实体的所有特权。为此,您可以执行类似的命令

以root用户身份登录并发出命令

GRANT ALL ON DB_NAME.* TO 'USER'@'HOST' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.