用于创建mysql.user的存储过程

时间:2017-04-30 18:36:51

标签: mysql sql stored-procedures ddl

我尝试创建一个存储过程,该过程将采用两个参数(用户名和密码),并使用户在模式上具有某些授权。这就是我目前所拥有的:

CREATE PROCEDURE `create_admin` (
IN userName VARCHAR(60),
IN userPass VARCHAR(60))
BEGIN

CREATE USER userName@'%';
SET PASSWORD FOR userName@'%' = PASSWORD(userPass);
GRANT DELETE,EXECUTE,INSERT,SELECT, UPDATE ON kairos.* TO userName@'%';
SHOW GRANTS FOR userName@'%';

END

但是,密码给我带来了各种麻烦。无论我做什么,我似乎无法将变量放在密码字段中,无论是使用CREATE USER x IDENTIFIED BY y语法,还是使用此语法。我错过了什么?

1 个答案:

答案 0 :(得分:0)

尝试以下过程通过传递用户名并将word作为参数传递来创建用户:

首先授予您的用户访问权限以创建用户和执行过程。 ' TEST'是用于创建过程的登录用户名。

GRANT CREATE USER TO TEST;

CREATE OR REPLACE PROCEDURE create_admin(
    userName IN VARCHAR2,
    userPass IN VARCHAR2)
IS
  SQLTest VARCHAR2 (32767);
BEGIN
  SQLTest := 'CREATE USER "'||userName||'" IDENTIFIED BY "'||userPass||'"';
  EXECUTE IMMEDIATE SQLTest;
END create_admin;
/

执行创建用户的程序:

EXEC create_admin('NEWUSER', 'NEWUSER1');