我们的数据库中有几个存储过程,它们是用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”。
我希望这能增加更多的清晰度。谢谢你,谢谢
1条答案
按热度按时间jhdbpxl91#
在创建
PROCEDURE
时,包含SQL SECURITY
子句。你似乎有SQL SECURITY DEFINER
,并创建为“根”。要谨慎;这是危险的,因为过程中的错误可能导致严重的损害。请提供
SHOW CREATE PROCETURE ...
GRANT
也将EXECUTE
特权授予调用程序。否则用户不能CALL
proc。请提供
SHOW GRANTS FOR ...
示例: