J'ai un utilisateur MySQL et je veux qu'il affiche UNIQUEMENT les vues que je veux et pas toute autre table dans la base de données. J'ai accordé à cet utilisateur des autorisations uniquement sur certaines vues, comme suit:
GRANT SHOW VIEW ON `myDatabase`.`awesome_view` TO 'thisUser'@'%'
Si je fais une show grants;
déclaration, je ne peux voir ces autorisations que comme prévu. Cependant, j'aimerais que cet utilisateur interroge JUSTE les vues et non les tables liées à ces vues, mais je ne trouve pas de moyen de le faire. Il semble que si je veux que l'utilisateur fasse une sélection sur la vue, la sélection doit également être accordée pour la table, ou je me trompe?
Si je refuse l' select
instruction dans le reste des tableaux, et dans la ligne de commande, j'essaie de faire une sélection, j'ai obtenu ce qui suit:
SELECT * FROM myDatabase.fordibenForYouTable;
ERROR 1142 (42000): SELECT command denied to user 'thisUser'@'localhost' for table 'fordibenForYouTable'
C'est ce que je veux en effet, mais on m'a également refusé si je sélectionne les données de vue.
Existe-t-il un moyen de mettre à la disposition de l'utilisateur uniquement les vues et non les tables?
la source
Je sais que c'est vieux maintenant, mais voici ce qui a résolu ce problème pour moi ...
La réponse était avec la syntaxe "SQL SECURITY".
ma définition de vue d'origine avait SQL SECURITY réglé sur "INVOKER". Cela signifiait que l'utilisateur était obligé d'avoir une autorisation de sélection sur la vue et la table.
Lorsque j'ai changé la SÉCURITÉ SQL pour qu'elle soit "DÉFINISSEUR", je ne peux accorder à l'utilisateur une autorisation de sélection que sur la vue.
la source