创建新过程时,rds上的mariadb会创建新用户@ ip.ec2.host

时间:2019-06-27 18:08:59

标签: mysql amazon-web-services mariadb amazon-rds

我们有一个mariadb实例,该实例是从bash脚本中调用的。在脚本内,我们创建一个procedure,该脚本将在.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地址的新用户?

如何阻止创建用户?

1 个答案:

答案 0 :(得分:1)

(评论太大)(来自变更日志)

----- 2018-10-26 MariaDB 5.5.62和2018-09-25 MariaDB 10.2.18-------

错误#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的情况下,没有将EXECUTEALTER 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变量后,如果用户尚没有这些特权,则服务器会自动向存储例程的创建者授予EXECUTEALTER ROUTINE特权。当特权用户在主服务器上使用DEFINER作为非特权用户创建过程时,当前用户将被视为特权用户,并且mysql.procs_priv表不会更新。当这样的语句复制到从属服务器时,非特权的DEFINER被视为从属服务器上的当前用户,并且正在分配特权。这导致在主机和从机上分配的特权有所不同。该修复程序确保将存储例程的创建者添加到二进制日志中,并且从属服务器现在将在授予特权之前首先检查用户是否存在。为了保持与以前版本的兼容性,当INVOKER不可用时,将使用DEFINER。作为此修复程序的一部分,可以使用匿名用户从主服务器复制到从服务器。 (缺陷号20049894)

-----尚未发布5.0.8-修复了错误------

即使在语句SET @@ GLOBAL.automatic_sp_privileges = 1之后,使用--skip-grant-tables运行服务器时,也会执行对存储例程的特权的授予和撤销。被执行了。 (错误#9993)