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

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

我们在 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启用后,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 -- 已修复错误 -- -----

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

关于mysql - 创建新过程时,rds 上的 mariadb 会创建新用户@ ip.ec2.host,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56796584/

相关文章:

MySQL从许多列中选择不同的一列

amazon-web-services - 域转移后 AWS Route 53 上的域传播出错

amazon-web-services - 无服务器框架和 CloudFormation 之间的区别?

amazon-web-services - removalPolicy : cdk. RemovalPolicy.DESTROY 是如何工作的?

mysql - 如何在laravel中将数组保存到mysql数据库

php - 如何使用数组值查询mysql/mariadb

mysql - 根据其他表的时间戳动态控制 SQL Select

mysql - 如何使用脚本更新 BLOB 值(MySQL 文件)?

mysql返回值即使为null

mysql - 使用内部联接来联接时间戳略有不同的 mySQL 列