Estou trabalhando na criação de um banco de dados mysql 'somente leitura'. Eu quero que o usuário possa ver tudo, mas não possa modificar nada. Meu usuário tem atualmente as seguintes concessões:
GRANT USAGE ON . TO 'sqlprostudio-ro'@'%' IDENTIFIED BY PASSWORD '*x'
GRANT SELECT, EXECUTE, SHOW VIEW ON northwind.* TO 'sqlprostudio-ro'@'%'
Eu posso ver procedimentos armazenados, mas se eu executar:
SHOW CREATE PROCEDURE x
A coluna 'Criar procedimento' retorna nulo. Existe uma maneira de permitir que um usuário somente leitura veja o procedimento de criação sem poder modificá-lo?
a segunda linha em man diz:
Para usar qualquer uma das instruções, você deve ser o usuário nomeado na cláusula DEFINER da rotina ou ter acesso SELECT à tabela mysql.proc. Se você não tiver privilégios para a rotina em si, o valor exibido para o campo Criar procedimento ou Criar função será NULL.
A outra opção (apenas uma sugestão) você pode projetar um procedimento ou função (preferível) para mostrar a informação em questão.
Cumprimentos,
No MySQL 8.0 as coisas mudaram, e você tem que conceder privs SELECT globais ao usuário, então você precisará fazer:
A partir do MySQL 8.0.20, em vez de adicionar as permissões SELECT globais (muito amplas), adicione as novas permissões SHOW_ROUTINE:
Para MySQL 8 , conecte seu banco de dados via Workbench , vá para Administration -> User and Privileges , e selecione a conta de usuário que deseja modificar, então mude para "Administrative Roles", marque "SELECT" no painel direito ( Global Privileges ), clique em ' Aplicar ' e pronto.