首页 > 解决方案 > rds 上的 mariadb 在创建新过程时创建新用户@ip.ec2.host

问题描述

我们mariadb在 rds 上有一个从 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 地址的新用户的预期行为吗?

我们如何阻止用户被创建?

标签: mysqlamazon-web-servicesmariadbamazon-rds

解决方案


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

----- 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 作为非特权用户在 master 上创建过程时,当前用户被认为是特权用户并且 mysql.procs_priv 表不会更新。当这样的语句被复制到 slave 时,非特权 DEFINER 被认为是 slave 上的当前用户并且正在分配特权。这导致了在主服务器和从服务器上分配的权限的差异。该修复确保将存储例程的创建者添加到二进制日志中,并且从属现在在授予权限之前首先检查用户是否存在。为了保持与以前版本的兼容性,当 INVOKER 不可用时使用 DEFINER。作为此修复的一部分,匿名用户可用于从 master 复制到 slave。(缺陷号 20049894)

----- 尚未发布 5.0.8 -- 已修复的错误 -- -----

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


推荐阅读