我们有一个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地址的新用户?
如何阻止创建用户?
答案 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的情况下,没有将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-修复了错误------
即使在语句SET @@ GLOBAL.automatic_sp_privileges = 1之后,使用--skip-grant-tables运行服务器时,也会执行对存储例程的特权的授予和撤销。被执行了。 (错误#9993)