Ir ao conteúdo
  • Cadastre-se

Criar um novo usuário a partir de uma trigger no MySql


Posts recomendados

Olá, estou tentando criar um novo usuário no MySql a partir de uma trigger. A ideia é que toda vez que eu insira um cliente no banco a trigger seja disparada e execute uma procedure que preencha os campos em uma tabela usuário e também crie este usuário, com as devidas permissões no meu SGBD (MySql).

Abaixo segue minha tentativa, mas da o seguinte erro:

error 1422:  Explicit or implicit commit is not allowed in stored function or trigger.

Notem que nem cheguei a implementar os grants.

DELIMITER $$
CREATE OR REPLACE PROCEDURE TESTE_PROCEDURE (IN CPF VARCHAR(15), IN NOME VARCHAR(20), IN SENHA VARCHAR(20))
BEGIN
   DECLARE USUARIO VARCHAR(30);
   DECLARE SENHA VARCHAR(30);
    
   INSERT INTO USUARIO VALUES('4', NOME, SENHA, CPF);
   
   SET USUARIO = CONCAT(NOME, '@localhost');
   
   CREATE USER USUARIO identified by '111222';
  
END $$
DELIMITER ;


DELIMITER $$
CREATE TRIGGER TESTE_INSERCAO AFTER INSERT ON CLIENTE
FOR EACH ROW
BEGIN

    CALL TESTE_PROCEDURE(NEW.CPF, NEW.NOME, '123456');
    
END $$
DELIMITER ;

 

Link para o comentário
Compartilhar em outros sites

:o Caramba, rs essa foi difícil..

 

Eu tentei aqui mas não foi dessa vez. rsrs

Achei um link http://stackoverflow.com/questions/11951570/mysql-create-user-with-a-variable

 

O mais perto que consegui chegar foi dessa forma abaixo;

 

No caso a chamada da Procedure dentro da trigger não tá dando :-( , uma forma seria listar os usuários já cadstrados no mysql e inserir;

 

Cria uma tarefa (rotina que roda de tempos em tempos) chamando a CALL teste , que de tempos em temos a procedure é acionada;

É apenas uma solução, mas creio que não é boa, rsrs

 

 


DELIMITER $$
CREATE  PROCEDURE teste()
BEGIN
   SET @nome:=null; 
   	SELECT DISTINCT
      @nome:=nome, @senha:=senha
from usuario
where
	usuario.nome not in (select mysql.user.User from mysql.user where mysql.user.User=usuario.nome)
   and usuario.nome is not null
   and usuario.senha is not null
	limit 1,1
	;
	   
	   
			SET @query1 = CONCAT('
			        CREATE USER  "',@nome,'"@"localhost" IDENTIFIED BY "',@senha,'" '
			        );
			PREPARE stmt FROM @query1; EXECUTE stmt; DEALLOCATE PREPARE stmt ;
			 
			END $$
			DELIMITER ;

			
call teste ;

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...