Mysql 程序错误(拒绝用户执行命令)

Mysql Procedure Error (execute command denied to user)

创建程序:

CREATE DEFINER=`gnysoftxuser`@`%` PROCEDURE `insertadmin`(IN  adi  VARCHAR(150))BEGIN Insert Into mekan_tablo (mekan_adi) values (adi); END;

Mysql查询

CALL insertadmin('test');

Mysql 错误:

execute command denied to user 'gnysoftxuser'@'%'for routine 'xdb.insertadmin'

这意味着您正在连接的 MySQL 用户没有数据库的 EXECUTE 权限。 https://dev.mysql.com/doc/refman/5.5/en/privilege-system.html

我找不到关于它的文档,但似乎 DEFINER 用户必须获得 EXECUTE 授权,即使它没有执行任何操作(1)。

  1. 创建用户userexecuteonly
  2. 授予用户仅执行权限
  3. 创建用户 userselectonly
  4. 仅授予用户选择权SELECT
  5. 创建程序设置 DEFINER as userselectonlythat selects data
  6. 仅以用户身份连接
  7. 调用程序
  8. 注意错误 SQL 错误 (1370):执行命令被用户 userselectonly 拒绝
  9. 授予 userselectonlyEXECUTE
  10. 调用程序
  11. 程序运行和 returns 数据。

(1) 该过程没有理由不调用另一个过程

如果在其他地方使用 userselectonly 并且不应该能够执行程序,这可能是一个问题。

您需要授予执行权限。在 MYSQL 命令行中,以具有授予权限的用户身份登录,您可以编写:

GRANT EXECUTE ON PROCEDURE 'xdb'.'insertadmin' TO 'gnysoftxuser'@'localhost'; 
flush privileges;

(在您的情况下,localhost 将被替换为 %,这是一个通配符,单独使用允许任何 IP 地址或本地主机。您可能希望使用特定的 IP、localhost 或通配符,例如 '192.168 .1.%')

执行完这两行后,再试一次。