Mysql 如何一般/动态创建/删除用户

Mysql 如何一般/动态创建/删除用户,mysql,database,missing-features,Mysql,Database,Missing Features,与…有关,但与…分离 是否可以实现一般/动态添加用户的功能,即模拟MySQL中其他DBMS包含的sp_adduser系统过程 MySQL不支持以下语法如果[not]存在,请参阅: 它也不支持以下内容: drop procedure if exists create_user_if_not_exists; delimiter || create procedure create_user_if_not_exists ( sUser varchar(60),

与…有关,但与…分离

是否可以实现一般/动态添加用户的功能,即模拟MySQL中其他DBMS包含的sp_adduser系统过程

MySQL不支持以下语法如果[not]存在,请参阅:

它也不支持以下内容:

drop procedure if exists create_user_if_not_exists;

delimiter ||

create procedure create_user_if_not_exists
               ( sUser     varchar(60),
                 sHost     varchar(16),
                 sPassword varchar(255) )
begin

-- ensure user does not yet exist
if (select ifnull((select 1
                     from mysql.user
                    where User = sUser
                      and Host = sHost), 0) = 0) then
  set @createUserText = concat('create user ''', sUser, '''@''', sHost, ''' identified by ''', sPassword, ''';');

  prepare createUserStatement FROM @createUserText;
  execute createUserStatement;
  deallocate prepare createUserStatement;
end if;

end ||

delimiter ;
因为如果您尝试调用上述过程:

call create_user_if_not_exists ( 'foo', '%', 'bar' );
你会得到一个可爱的信息:

准备好的语句协议尚不支持此命令

以下功能可以使用,但显然不是特别可重用:

drop procedure if exists create_user_if_not_exists;

delimiter ||

create procedure create_user_if_not_exists
               (  )
begin

if (select ifnull((select 1
                     from mysql.user
                    where User = 'foo'
                      and Host = '%'), 0) = 0) then
  create user 'foo'@'%' identified by password 'bar';
end if;

end ||

delimiter ;

哦,对不起,我刚刚听到你说的是db用户。不是应用程序用户

您可能希望插入到。。。。。。在重复密钥更新时……=值。。。。。声明


我在我的常规保存对象方法中使用了它,使用它我不必关心用户是否存在,它将在那里,并且在我提交后是最新的。

是的,这就是我最终要做的。但感觉不是特别干净。。。
drop procedure if exists create_user_if_not_exists;

delimiter ||

create procedure create_user_if_not_exists
               (  )
begin

if (select ifnull((select 1
                     from mysql.user
                    where User = 'foo'
                      and Host = '%'), 0) = 0) then
  create user 'foo'@'%' identified by password 'bar';
end if;

end ||

delimiter ;