mysql 非所有者用户无法通过SQL接口编辑或执行存储过程

vngu2lb8  于 2023-10-15  发布在  Mysql
关注(0)|答案(1)|浏览(106)

我们的数据库中有几个存储过程,它们是用root用户作为定义者创建的。目前,所有用户都可以使用CALL方法成功地调用和执行这些存储过程。然而,非root用户在尝试通过图形界面(如Google或Navicat)访问这些过程时会遇到问题。
特别是,非root用户无法通过Windows或Navicat界面与过程进行交互。尽管授予用户例程所需的所有必要权限,但在通过这些图形工具处理过程时,他们仍然面临限制。用户可以对表和视图执行各种操作而不会遇到任何问题,但是在尝试使用过程时会遇到限制。
我们还尝试了使用不同的非root用户创建测试过程,在这些情况下,只有root用户和创建过程的用户可以通过EJB接口访问和操作过程。
我在这里添加更多信息。下面是create语句:

DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `p_contact_lookup`(
    IN contactid VARCHAR(8)
)
BEGIN...

这是我给用户的特权。

GRANT EXECUTE, ALTER ROUTINE, CREATE ROUTINE ON mydb.* TO 'myuser'@'%';

另外,我用root用户创建了这些过程,因为cloudsql不允许我用非root用户创建它,即使该非root用户拥有除CLOUDSQLSUPERUSER权限之外的“ALL PRIVILEGES”。
我希望这能增加更多的清晰度。谢谢你,谢谢

jhdbpxl9

jhdbpxl91#

在创建PROCEDURE时,包含SQL SECURITY子句。你似乎有SQL SECURITY DEFINER,并创建为“根”。要谨慎;这是危险的,因为过程中的错误可能导致严重的损害。
请提供SHOW CREATE PROCETURE ...
GRANT也将EXECUTE特权授予调用程序。否则用户不能CALL proc。
请提供SHOW GRANTS FOR ...示例:

SHOW GRANTS FOR forest@localhost;
+------------------------------------------------------------+
| Grants for forest@localhost                                |
+------------------------------------------------------------+
| GRANT USAGE ON *.* TO `forest`@`localhost`                 |
| GRANT ALL PRIVILEGES ON `forest`.* TO `forest`@`localhost` |
+------------------------------------------------------------+

相关问题