Quando a gente cria uma procedure, normalmente colocamos o DEFINER
que suponho que seja o dono da procedure, se eu nao definir qualquer usuario consegue chamar a minha procedure ? e quando eu defino somente eu consigo chamar ela ?
Quando a gente cria uma procedure, normalmente colocamos o DEFINER
que suponho que seja o dono da procedure, se eu nao definir qualquer usuario consegue chamar a minha procedure ? e quando eu defino somente eu consigo chamar ela ?
Boa tarde, Davi! Tudo bem com você?
Seu pensamento está correto. Quando criamos uma procedure com o DEFINER
, estamos especificando qual usuário será o "dono" dela.
Se não definirmos o DEFINER
, O MySQL vai assumir que o DEFINER
é o usuário que está criando a procedure no momento. Por exemplo, se estivermos logado como user1
e criarmos uma procedure sem especificar o DEFINER
, o MySQL vai considerar user1
como o DEFINER
.
A permissão para executar a procedure depende dos privilégios que foram concedidos aos usuários. Mesmo que você não defina um DEFINER
, outros usuários só poderão executar a procedure se tiverem a permissão EXECUTE
para ela. Você pode conceder permissão a outros usuários usando o comando GRANT
:
GRANT EXECUTE ON PROCEDURE alo_mundo TO 'user1'@'localhost';
Lembrando que para criar uma PROCEDURE
não é obrigatório usar um DEFINER
.
Uma curiosidade é que você pode verificar todos os usuários e hosts do banco usando o seguinte comando:
SELECT user,host FROM mysql.user;
Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!