Descobrindo Definer de Objetos – MySQL

Em alguns posts antigos, como o de erro com o root e delimiter citamos algumas vezes o ‘definer’. Descobri que poucos sabem o que é um definer, sua função e sua importância no mysql.

Definer funciona como um owner de objetos dentro do mysql. Ao criar alguns objetos, como triggers e views, um definer deve ser especificado, ou, será criado com o seu próprio user.
Por ‘boas práticas’ recomendamos que o definer dos objetos seja sempre o ‘root’@’localhost’. Por que? O root é um user ao qual você não vai excluir do MySQL, ao contrário do user daquele DBA que hoje está na sua empresa e amanhã sai. E ele sempre terá acesso local no MySQL. Uma vez o user sendo Definer de um objeto, ele não pode deixar de existir no banco. Se deixar de existir, o objeto para de funcionar. O Mysql dá um erro ao qual você nunca irá entender, e ao excluir o user, não é retornado nenhum aviso quanto aos seus definers.

Por isso, se atente aos seus objetos e na criação dos mesmos, trabalhe com padrão e tenha segurança.
Para descobrir definers de objetos, trabalhe na tabela ‘information_schema‘, onde você consegue as informações dos objetos.
Abaixo, exemplos de select para descobrir os definers.

SELECT `specific_name`, `routine_schema`, `routine_name`, `routine_type`, `definer` FROM `information_schema`.`routines` WHERE `definer` = ‘meu_user’;

SELECT `trigger_catalog`, `trigger_schema`, `trigger_name`, `definer` FROM `information_schema`.`triggers` WHERE`definer` = ‘meu_user’;

SELECT `table_catalog`, `table_schema`, `table_name`, `definer` FROM `information_schema`.`views` WHERE`definer` = ‘meu_user’;

Espero ter ajudado!
Até mais pessoal =)

Deixe um comentário