Eu tenho um usuário MySQL e quero que ele visualize APENAS as visualizações que eu quero e não qualquer outra tabela no banco de dados. Eu concedi a este usuário permissões apenas em determinadas visualizações, como a seguir:
GRANT SHOW VIEW ON `myDatabase`.`awesome_view` TO 'thisUser'@'%'
Se eu fizer uma show grants;
declaração, só posso ver essas permissões conforme o esperado. No entanto, eu gostaria que esse usuário consultasse APENAS as exibições e não as tabelas relacionadas a essas exibições, mas não consigo encontrar uma maneira de fazer isso. Parece que se eu quiser que o usuário faça uma seleção na exibição, a seleção também deve ser concedida para a tabela, ou estou errado?
Se eu negar a select
instrução no restante das tabelas e na linha de comando, tentar fazer uma seleção, obtive o seguinte:
SELECT * FROM myDatabase.fordibenForYouTable;
ERROR 1142 (42000): SELECT command denied to user 'thisUser'@'localhost' for table 'fordibenForYouTable'
É isso que eu realmente quero, mas também sou negado se selecionar os dados da visualização.
Existe uma maneira de disponibilizar ao usuário apenas as visualizações e não as tabelas?
fonte
Eu sei que isso é velho agora, mas aqui está o que resolveu esse problema para mim ...
A resposta foi com a sintaxe "SQL SECURITY".
minha definição de exibição original tinha o SQL SECURITY definido como "INVOKER". Isso significava que o usuário era forçado a ter permissão de seleção na exibição e na tabela.
Quando alterei o SQL SECURITY para "DEFINER", posso conceder ao usuário permissão de seleção apenas na exibição.
fonte