我们的数据库中有几个存储过程,它们是使用 root 用户作为定义者创建的。目前,所有用户都可以使用CALL方法成功调用并执行这些存储过程。然而,非 root 用户在尝试通过 Workbench 或 Navicat 等图形界面访问这些过程时会遇到问题。
具体来说,非 root 用户无法通过 Workbench 或 Navicat 界面与程序进行交互。尽管向我们的用户授予了例程所需的所有必要权限,但他们在通过这些图形工具处理过程时仍然面临限制。用户可以毫无问题地对表和视图执行各种操作,但在尝试使用过程时会遇到限制。
我们还尝试过使用不同的非root用户创建测试程序,在这些情况下,只有root用户和创建程序的用户可以通过Workbench界面访问和操作程序。
如果有人可以提供帮助,请告诉我。非常感谢!
创建
PROCEDURE
时,包含 SQL SECURITY
子句。您似乎拥有 SQL SECURITY DEFINER
并以“root”身份进行创建。需谨慎;这很危险,因为过程中的错误可能会导致严重损坏。
请提供
SHOW CREATE PROCETURE ...
还有调用者的
GRANT
EXECUTE
特权。否则用户无法 CALL
过程。
请提供
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` |
+------------------------------------------------------------+