我们在 rds 上有一个 mariadb
实例,它是从 bash 脚本调用的。在脚本中,我们创建一个过程
,该过程会在 .sql 脚本完成后删除。 mysql
用户已设置为具有自定义权限的 myUser
@%
delimiter |
DROP PROCEDURE IF EXISTS myTmpProc |
CREATE PROCEDURE myTmpProc()
BEGIN
... --code goes here
-- Execute the stored procedure
CALL myTmpProc() |
-- Don't forget to drop the stored procedure when you're done!
DROP PROCEDURE IF EXISTS myTmpProc |
DELIMITER ;
创建、运行、删除零件脚本按预期运行并完成。
但是,此过程正在为运行脚本的 ec2 实例创建一个新用户 myUser
@x.x.x.x
。该用户没有任何权限。
当我们下次运行脚本时,它会以新用户身份运行,但由于该用户没有权限而失败。
在创建新过程时,这是使用相同用户名但在 ec2 IP 地址上创建新用户的预期行为吗?
我们怎样才能阻止创建用户?
最佳答案
(太大,无法发表评论)(来自变更日志)
----- 2018-10-26 MariaDB 5.5.62 & 2018-09-25 MariaDB 10.2.18 -- -- -----
Bug#27407480:AUTOMATIC_SP_PRIVILEGES 需要 MYSQL.USER 表的插入权限
----- 2018-07-27 8.0.12 一般可用性 & 2018-07-27 5.7.23 一般可用性 & 2018-07-27 5.6.41 一般可用性 & 2018-07-27 5.5.61 一般可用性 -- -- -----
与 automatic_sp_privileges启用后,EXECUTE和 ALTER ROUTINE特权没有正确地授予常规创建者。 (错误#27407480)
----- 2017-04-10 8.0.1 开发里程碑 -- 修复错误 -- -----
当 automatic_sp_privileges启用了系统变量,但它对匿名用户没有预期的效果。 (错误#20266641)
----- 2015-04-08 5.7.7 候选版本 -- 修复错误 -- 复制 -----
----- 2015-04-06 5.6.24 正式发布 -- 修复错误 -- 复制 -----
当 automatic_sp_privileges设置变量后,服务器会自动授予 EXECUTE和 ALTER ROUTINE存储例程的创建者的权限(如果用户尚不具有这些权限)。当特权用户在主服务器上以非特权用户身份使用 DEFINER 创建过程时,当前用户将被视为特权用户,并且 mysql.procs_priv 表不会更新。当这样的语句复制到从属设备时,非特权 DEFINER 被视为从属设备上的当前用户,并且正在分配特权。这导致在主设备和从设备上分配的特权存在差异。该修复确保存储例程的创建者被添加到二进制日志中,并且从服务器现在在授予权限之前首先检查用户是否存在。为了保持与以前版本的兼容性,当 INVOKER 不可用时,将使用 DEFINER。作为此修复的一部分,可以使用匿名用户从主服务器复制到从服务器。 (错误#20049894)
----- 尚未发布 5.0.8 -- 已修复错误 -- -----
使用 --skip-grant-tables 运行服务器时,执行了对存储例程的权限授予和撤销。即使在语句 SET @@GLOBAL.automatic_sp_privileges = 1; 之后被处决。 (错误#9993)
关于mysql - 创建新过程时,rds 上的 mariadb 会创建新用户@ ip.ec2.host,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56796584/