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)。
- 创建用户userexecuteonly
- 授予用户仅执行权限
- 创建用户 userselectonly
- 仅授予用户选择权SELECT
- 创建程序设置 DEFINER as userselectonlythat selects data
- 仅以用户身份连接
- 调用程序
- 注意错误 SQL 错误 (1370):执行命令被用户 userselectonly 拒绝
- 授予 userselectonlyEXECUTE
- 调用程序
- 程序运行和 returns 数据。
(1) 该过程没有理由不调用另一个过程
如果在其他地方使用 userselectonly 并且不应该能够执行程序,这可能是一个问题。
您需要授予执行权限。在 MYSQL 命令行中,以具有授予权限的用户身份登录,您可以编写:
GRANT EXECUTE ON PROCEDURE 'xdb'.'insertadmin' TO 'gnysoftxuser'@'localhost';
flush privileges;
(在您的情况下,localhost 将被替换为 %,这是一个通配符,单独使用允许任何 IP 地址或本地主机。您可能希望使用特定的 IP、localhost 或通配符,例如 '192.168 .1.%')
执行完这两行后,再试一次。
创建程序:
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)。
- 创建用户userexecuteonly
- 授予用户仅执行权限
- 创建用户 userselectonly
- 仅授予用户选择权SELECT
- 创建程序设置 DEFINER as userselectonlythat selects data
- 仅以用户身份连接
- 调用程序
- 注意错误 SQL 错误 (1370):执行命令被用户 userselectonly 拒绝
- 授予 userselectonlyEXECUTE
- 调用程序
- 程序运行和 returns 数据。
(1) 该过程没有理由不调用另一个过程
如果在其他地方使用 userselectonly 并且不应该能够执行程序,这可能是一个问题。
您需要授予执行权限。在 MYSQL 命令行中,以具有授予权限的用户身份登录,您可以编写:
GRANT EXECUTE ON PROCEDURE 'xdb'.'insertadmin' TO 'gnysoftxuser'@'localhost';
flush privileges;
(在您的情况下,localhost 将被替换为 %,这是一个通配符,单独使用允许任何 IP 地址或本地主机。您可能希望使用特定的 IP、localhost 或通配符,例如 '192.168 .1.%')
执行完这两行后,再试一次。