在 MySQL 中,您不能更改过程,而必须执行删除/创建过程来更改过程的主体。问题是 drop/create 还删除了对该选定过程赋予的执行权限。
即使在删除/创建过程之后,是否有任何方法可以提供永久执行权限。
验证示例代码如下
delimiter //
创建过程 t1 ()
select 1;
//将过程 t1 上的执行权限授予 test1@'%';
call t1() 效果很好,但是如果您在先执行 drop 过程后运行上述代码,则会出现权限错误。
任何帮助深表感谢
在 MySQL 中,您不能更改过程,而必须执行删除/创建过程来更改过程的主体。问题是 drop/create 还删除了对该选定过程赋予的执行权限。
即使在删除/创建过程之后,是否有任何方法可以提供永久执行权限。
验证示例代码如下
delimiter //
创建过程 t1 ()
select 1;
//将过程 t1 上的执行权限授予 test1@'%';
call t1() 效果很好,但是如果您在先执行 drop 过程后运行上述代码,则会出现权限错误。
任何帮助深表感谢
最好是在数据库级别授予执行:
将 db.* 上的执行权限授予 test1@'10.%';(不要用%,太冒险了,用ip子网) 这样就不需要在SP中授予权限了。
我认为有两件事可以控制它:
和
如果您对 proc 的重新创建未能包含所有标志(
DETERMINISTIC
,SECURITY
等),那么它就会丢失。如果您以 root 身份使用 构建它DEFINER
,那么其他用户将无法执行它。我怀疑是否
GRANT
由于DROP PROCEDURE
- 毕竟,这EXECUTE
是普遍的,而不是特定于proc。发现可以通过以下步骤实现
关闭变量 automatic_sp_privileges
现在将程序的执行授权授予不同的用户
再次删除并重新创建该过程,并且授权仍然存在,还将其添加到 ini 文件中以使此更改永久化。
谢谢大家的帮助