Mysql存储过程,用于根据其中一个参数创建用户并授予权限
据我所知,在我们达到案例之前,一切都是有效的,但我在制作案例时遇到了一些问题,我如何根据我的p_Tipo参数授予特权?我怀疑是否有人会需要这个,但我发现,我所要做的就是镜像第一部分,最终看起来像这样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))
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