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 ?

Comment accorder tous les privilèges dans une base de données MySQL à l'exception d'une table spécifique ?

DDD
DDDoriginal
2024-11-04 05:20:291018parcourir

How to Grant All Privileges in a MySQL Database Except for a Specific Table?

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 :

  1. Révoquer tous les privilèges :

    REVOKE ALL PRIVILEGES ON db.* FROM user@localhost;
  2. 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";
  3. Copier et exécuter les résultats
    Copiez les résultats de la requête et exécutez dans le client MySQL pour accorder des privilèges de mise à jour à toutes les tables sauf celle spécifiée.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn