Maison > base de données > tutoriel mysql > 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
Libérer: 2024-11-04 05:20:29
original
1048 Les gens l'ont consulté

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;
    Copier après la connexion
  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";
    Copier après la connexion
  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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal