Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql存储过程,用于根据其中一个参数创建用户并授予权限_Mysql_Stored Procedures - Fatal编程技术网

Mysql存储过程,用于根据其中一个参数创建用户并授予权限

Mysql存储过程,用于根据其中一个参数创建用户并授予权限,mysql,stored-procedures,Mysql,Stored Procedures,据我所知,在我们达到案例之前,一切都是有效的,但我在制作案例时遇到了一些问题,我如何根据我的p_Tipo参数授予特权?我怀疑是否有人会需要这个,但我发现,我所要做的就是镜像第一部分,最终看起来像这样 CREATE DEFINER=`root`@`localhost` PROCEDURE `addUser`(IN p_Name varchar(100), IN p_Passw varchar(200), IN p_Tipo varchar(3), IN p_Email varchar(200))

据我所知,在我们达到案例之前,一切都是有效的,但我在制作案例时遇到了一些问题,我如何根据我的p_Tipo参数授予特权?

我怀疑是否有人会需要这个,但我发现,我所要做的就是镜像第一部分,最终看起来像这样

CREATE DEFINER=`root`@`localhost` PROCEDURE `addUser`(IN p_Name varchar(100), IN p_Passw varchar(200),
IN p_Tipo varchar(3), IN p_Email varchar(200))
BEGIN
    SET @sql := CONCAT('CREATE USER \'', p_Name, '\'@\'localhost\'', ' IDENTIFIED BY \'', p_Passw, '\'');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    INSERT INTO Utilizador (EmailUtilizador, NomeUtilizador,TipoUtilizador) VALUES (p_Email,p_Name,p_Tipo);
    CASE
    WHEN p_Tipo = 'ADM' THEN GRANT appadmin TO p_Name@'localhost';
    WHEN p_Tipo = 'SEG' THEN GRANT seguranca TO p_Name@'localhost';
    WHEN p_Tipo = 'CSG' THEN GRANT chefeseguranca TO p_Name@'localhost';
    WHEN p_Tipo = 'DIR' THEN GRANT diretor TO p_Name@'localhost';
    WHEN p_Tipo = 'SEN' THEN GRANT sensor TO p_Name@'localhost';
    END CASE;
END
CREATE DEFINER=`root`@`localhost` PROCEDURE `addUser`(IN p_Name varchar(100), IN p_Passw varchar(200),
IN p_Tipo varchar(3), IN p_Email varchar(200))
BEGIN
    SET @sql := CONCAT('CREATE USER \'', p_Name, '\'@\'localhost\'', ' IDENTIFIED BY \'', p_Passw, '\'');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    INSERT INTO Utilizador (EmailUtilizador, NomeUtilizador,TipoUtilizador) VALUES (p_Email,p_Name,p_Tipo);
    CASE
        WHEN p_Tipo = 'ADM' THEN SET @perm := concat('GRANT appadmin TO \'',p_Name,'\'@\'localhost\'');
        WHEN p_Tipo = 'SEG' THEN SET @perm := concat('GRANT seguranca TO \'',p_Name,'\'@\'localhost\'');
        WHEN p_Tipo = 'CSG' THEN SET @perm := concat('GRANT chefeseguranca TO \'',p_Name,'\'@\'localhost\'');
        WHEN p_Tipo = 'DIR' THEN SET @perm := concat('GRANT diretor TO \'',p_Name,'\'@\'localhost\'');
        WHEN p_Tipo = 'SEN' THEN SET @perm := concat('GRANT sensor TO \'',p_Name,'\'@\'localhost\'');
    END CASE;
    PREPARE grnt FROM @perm;
    EXECUTE grnt;
END