J'ai un utilisateur auquel je souhaite accorder toutes les autorisations READ sur un schéma de base de données.
Une façon est la suivante:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Existe-t-il un moyen de regrouper toutes les opérations de lecture dans grant?
SHOW VIEW
nonSHOW_VIEW
, mais vous n'avez pas besoin de l'accorder à un utilisateur à moins que vous ne vouliez qu'il puisse le faireSHOW CREATE VIEW
sur les vues ... ils peuvent sélectionner parmi les vues avec le seulSELECT
privilège. Qu'entendez-vous par «regrouper toutes les opérations de lecture dans la concession»?Réponses:
Cela dépend de la façon dont vous définissez «tout lu».
"Lire" à partir de tables et de vues est le
SELECT
privilège. Si c'est ce que vous entendez par «tous lus», alors oui:Cependant, on dirait que vous voulez dire une capacité à «voir» tout, à «regarder mais pas toucher». Alors, voici les autres types de lecture qui me viennent à l'esprit:
"Lire" la définition des vues est le
SHOW VIEW
privilège."Lire" la liste des requêtes en cours d'exécution par d'autres utilisateurs est le
PROCESS
privilège."Lire" l'état de réplication actuel est le
REPLICATION CLIENT
privilège.Notez que tout ou partie de ces éléments peut exposer plus d'informations que vous ne comptez exposer, selon la nature de l'utilisateur en question.
Si c'est la lecture que vous voulez faire, vous pouvez combiner n'importe lequel de ceux-ci (ou tout autre des privilèges disponibles ) dans une seule
GRANT
instruction.Cependant, il n'y a pas de privilège unique qui accorde un sous-ensemble d'autres privilèges, ce que vous semblez demander.
Si vous faites les choses manuellement et que vous recherchez un moyen plus simple de procéder sans avoir à vous souvenir de la subvention exacte que vous accordez généralement à une certaine classe d'utilisateurs, vous pouvez rechercher l'instruction pour régénérer les subventions d'un utilisateur comparable et la modifier. pour créer un nouvel utilisateur avec des privilèges similaires:
Changer «not_leet» et «localhost» pour correspondre au nouvel utilisateur que vous souhaitez ajouter, avec le mot de passe, entraînera une
GRANT
instruction réutilisable pour créer un nouvel utilisateur.De, si vous souhaitez qu'une seule opération configure et accorde le jeu limité de privilèges aux utilisateurs, et peut-être supprimer tous les privilèges non mérités, cela peut être fait en créant une procédure stockée qui encapsule tout ce que vous voulez faire. Dans le corps de la procédure, vous construisez l'
GRANT
instruction avec du SQL dynamique et / ou manipulez directement les tables d'octroi elles-mêmes.Dans cette question récente sur les administrateurs de base de données , l'affiche voulait la possibilité pour un utilisateur non privilégié de modifier d'autres utilisateurs, ce qui, bien sûr, n'est pas quelque chose qui peut normalement être fait - un utilisateur qui peut modifier d'autres utilisateurs est, à peu près par définition, non un utilisateur non privilégié - cependant - les procédures stockées ont fourni une bonne solution dans ce cas, car elles s'exécutent avec le contexte de sécurité de leur
DEFINER
utilisateur, permettant à toute personne disposant deEXECUTE
privilèges sur la procédure d'assumer temporairement des privilèges accrus pour leur permettre de faire les choses spécifiques la procédure accomplit.la source
Cela créera un utilisateur avec des
SELECT
privilèges pour toutes les bases de données, y compris les vues.la source
Différentes autorisations que vous pouvez accorder à un utilisateur sont
Pour fournir une autorisation à un utilisateur spécifique, vous pouvez utiliser ce framework:
J'ai trouvé cet article très utile
la source
Un guide étape par étape que j'ai trouvé ici .
Pour créer un compte utilisateur de base de données en lecture seule pour MySQL
À l'invite UNIX, exécutez le programme de ligne de commande MySQL et connectez-vous en tant qu'administrateur en tapant la commande suivante:
Tapez le mot de passe du compte root. À l'invite mysql, effectuez l'une des étapes suivantes:
Pour donner à l'utilisateur l'accès à la base de données à partir de n'importe quel hôte, tapez la commande suivante:
Si le collecteur sera installé sur le même hôte que la base de données, saisissez la commande suivante:
Cette commande donne à l'utilisateur un accès en lecture seule à la base de données à partir de l'hôte local uniquement. Si vous connaissez le nom d'hôte ou l'adresse IP de l'hôte sur lequel le collecteur sera installé, tapez la commande suivante:
Le nom d'hôte doit pouvoir être résolu par DNS ou par le fichier d'hôtes local. À l'invite mysql, tapez la commande suivante:
Tapez
quit
.Voici une liste d'exemples de commandes et de messages de confirmation:
la source
Même l'utilisateur a obtenu une réponse et @Michael - sqlbot a très bien couvert la plupart des points dans son message, mais un point manque, alors essayez simplement de le couvrir.
Si vous souhaitez fournir une autorisation de lecture à un utilisateur simple (pas de type administrateur) -
Remarque: EXECUTE est requis ici, afin que l'utilisateur puisse lire les données s'il existe une procédure stockée qui produit un rapport (avec quelques instructions de sélection).
Remplacez localhost par une adresse IP spécifique à partir de laquelle l'utilisateur se connectera à DB.
Les autorisations de lecture supplémentaires sont-
la source
Remarque pour MySQL 8, c'est différent
Vous devez le faire en deux étapes:
la source
Si vous souhaitez que la vue soit en lecture uniquement après avoir accordé l'autorisation de lecture, vous pouvez utiliser ALGORITHM = TEMPTABLE dans la définition DDL de la vue.
la source