Maison > Article > base de données > Comment accorder tous les privilèges dans une base de données MySQL à l'exception d'une table spécifique ?
Accorder des privilèges à une base de données, à l'exception d'une table spécifique dans MySQL
De nombreuses bases de données nécessitent souvent d'accorder différents niveaux de privilèges à différents utilisateurs. Certains utilisateurs peuvent avoir besoin d'un contrôle total sur une base de données, tandis que d'autres peuvent n'avoir besoin que d'autorisations limitées sur des tables spécifiques. Dans MySQL, attribuer des privilèges complets à un utilisateur peut être simple ; cependant, attribuer toutes les autorisations, à l'exception d'une table particulière, peut s'avérer difficile.
Tentatives initiales infructueuses
Comme mentionné dans la demande de l'utilisateur, tenter d'accorder tous les privilèges à l'aide de "db_name .*", puis l'octroi sélectif des privilèges SELECT sur la table souhaitée ne remplace pas les privilèges "tous". De plus, la révocation des privilèges d'insertion, de mise à jour et de suppression après avoir accordé tous les privilèges entraîne une erreur en raison de l'absence de règle d'octroi pour la table spécifique.
Attribution de privilèges individuels
Bien qu'accorder individuellement tous les privilèges à chaque table de la base de données, à l'exception de la table en lecture seule, puisse sembler fastidieux, c'est actuellement la méthode la plus directe et la plus fiable. Cette approche garantit que l'utilisateur n'a aucun droit de mise à jour pour la table spécifique.
Un moyen plus simple ?
L'utilisateur exprime l'espoir d'une solution plus simple, et il existe effectivement un technique qui combine la commodité d'accorder tous les privilèges avec l'exclusion d'une table spécifique :
Révoquer tous les privilèges :
REVOKE ALL PRIVILEGES ON db.* FROM user@localhost;
Utilisez Information_schema pour créer des instructions GRANT :
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";
Cette approche offre une alternative plus rapide et plus dynamique à l'octroi manuel de privilèges à chaque table individuellement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!