Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/11/2020, à 16:49

Balba

[résolu] phpmyadmin - Donner un accès à toutes les tables SAUF une

Bonjour,
J'ai une base avec une centaine de tables.
Je souhaite donner les droits SELECT à un utilisateur pour toutes les tables, sauf à une table particulière.
J'arrive à faire l'opération avec l'interface phpmyadmin, mais seulement pour une table à la fois ... ce qui prends beaucoup de temps.

Existe t'il une commande / fonction dans phpmyadmin permettant de :
_ donner l'accès à toutes les tables SAUF une
_ ou bloquer l'accès à une table particulière, même si l'utilisateur à l'accès sur la base.

Merci pour votre aide !

Dernière modification par Balba (Le 16/11/2020, à 23:01)

Hors ligne

#2 Le 16/11/2020, à 16:59

bruno

Re : [résolu] phpmyadmin - Donner un accès à toutes les tables SAUF une

Bonjour,

Accorder le droit SELECT sur toutes les tables de la base database à utilisateur@localhost

GRANT SELECT ON *.database TO 'utilisateur@localhost'

Supprimer ce droit sur la table1 de la base database :

REVOKE SELECT ON table1.database FROM 'utilisateur@localhost'

https://dev.mysql.com/doc/refman/8.0/en/grant.html
https://dev.mysql.com/doc/refman/8.0/en/revoke.html

--

Ce n'est pas un problème de serveur mais de développement et programmation. Je déplace.

Hors ligne

#3 Le 16/11/2020, à 18:58

Balba

Re : [résolu] phpmyadmin - Donner un accès à toutes les tables SAUF une

Merci Bruno pour votre retour.

L'ajout des droits se passe bien avec une version un peu modifiée: GRANT SELECT ON database.* TO 'utilisateur'@'localhost'  .
Par contre, pour retirer les droits sur la table en question (table1 dans l'exemple), j'ai le message d'erreur suivant :

ERROR 1147 (42000): There is no such grant defined for user 'utilisateur' on host 'localhost' on table 'table1'

Merci

Dernière modification par Balba (Le 16/11/2020, à 19:08)

Hors ligne

#4 Le 16/11/2020, à 19:54

bruno

Re : [résolu] phpmyadmin - Donner un accès à toutes les tables SAUF une

Désolé beaucoup d'erreurs de ma part. La syntaxe correcte est effectivement nom_de_la_base.nom_de_la_table et non l'inverse et les guillemets ne sont pas correctement placés. Je corrige donc :

GRANT SELECT ON database.* TO 'utilisateur'@'localhost';

et

REVOKE SELECT ON database.table1 FROM 'utilisateur'@'localhost';

Je viens de tester et effectivement cela n'a pas l'air aussi simple. La seconde commande échoue avec l'erreur que tu indiques. Je suppose que c'est parce que MySQL considère que le privilège SELECT est accordé au niveau de la base de données et non des tables individuellement par la première commande.

De ce fait je n'ai pas d'autre solution que de supprimer les privilèges :

REVOKE SELECT ON database.* TO 'utilisateur'@'localhost';

puis de répéter la commande pour chaque table :

GRANT SELECT ON database.table1 TO 'utilisateur'@'localhost';

Il y a sûrement une solution avec un requête SQL complexe mais je ne vois pas vraiment comment faire.

Hors ligne

#5 Le 16/11/2020, à 19:58

Balba

Re : [résolu] phpmyadmin - Donner un accès à toutes les tables SAUF une

Merci Bruno. Si quelqu'un a une autre solution, je suis preneur smile

Hors ligne

#6 Le 16/11/2020, à 20:35

bruno

Re : [résolu] phpmyadmin - Donner un accès à toutes les tables SAUF une

Regarde la première réponse ici :
https://stackoverflow.com/questions/628 … -one-table
Je n'arrive pas à reproduire la requête SQL mais cela me semble intéressant.
.

Hors ligne

#7 Le 16/11/2020, à 23:00

Balba

Re : [résolu] phpmyadmin - Donner un accès à toutes les tables SAUF une

Merci Bruno,

SELECT CONCAT("GRANT UPDATE ON db.", table_name, " TO user@localhost;")
FROM information_schema.TABLES
WHERE table_schema = "YourDB" AND table_name <> "table_to_skip";

Effectivement, cette solution fonctionne :
1) Lecture des tables,
2) Création automatique des requetes SQL,
3) Copier / coller des requetes dans la console,
4) La gestion des droits se fait ensuite table par table !

Super, Merci pour le coup de main

Hors ligne