No MySQL, você não pode alterar o procedimento, mas deve executar o procedimento drop/create para alterar o corpo do procedimento. O problema é que drop/create também remove as permissões de execução fornecidas nesse procedimento selecionado.
Existe alguma maneira de dar permissões de execução permanentes que permanecem mesmo após o procedimento de soltar/criar.
Um código de amostra para verificar é o seguinte
delimitador //
cria o procedimento t1 ()
seleciona 1;
//concede execução no procedimento t1 para test1@'%';
call t1 () funciona bem, mas se você executar o código acima depois de executar o procedimento de descarte primeiro, ocorrerá um erro de permissão.
Qualquer ajuda é muito apreciada
O melhor é conceder a execução no nível do banco de dados:
conceder executar em db.* para test1@'10.%'; (não use %, muito risco, use sub-rede ip) Dessa forma, você não precisa conceder permissão no SP.
Eu acho que há 2 coisas controlando isso:
E
Se a sua recriação do proc não incluir todos os sinalizadores (
DETERMINISTIC
,SECURITY
, etc), isso será perdido. E se você o construir como root, comDEFINER
, outros usuários não poderão executá-lo.Duvido que o
GRANT
seja perdido devido aoDROP PROCEDURE
- afinal, oEXECUTE
é geral, não específico do proc.Descobriu que isso poderia ser alcançado seguindo as etapas
desative a variável automatic_sp_privileges
Agora dê as concessões de execução no procedimento para diferentes usuários
solte e recrie o procedimento novamente e as concessões ainda estão presentes, também adicionei isso ao arquivo ini para tornar essa alteração permanente.
Obrigado a todos pela ajuda