Mysql хранимая процедура для создания пользователя и предоставления привилегий на основе одного из параметров - PullRequest
0 голосов
/ 13 марта 2020
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

Насколько я тестировал, все работает до тех пор, пока мы не дойдем до случая, но у меня есть некоторые проблемы при создании случая, когда я могу работать, как я могу предоставить привилегии на основе моего параметра p_Tipo?

1 Ответ

0 голосов
/ 14 марта 2020

Я сомневаюсь, что кому-то это понадобится, но я понял, все, что мне нужно было сделать, это как бы зеркало первой части, в итоге выглядело так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...