Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/07270.jsonl.gz/1511

Niveu colonne (Column level) :
Les droits de niveau colonne s'appliquent à une colonn donnée d'une table donnée. to single columns in a given table. Ces droits sont stockés dans la table
mysql.columns_priv .
Les commandes
GRANT et
REVOKE peuvent s'appliquer aux droits suivants, précisés dans
priv_type:
ALL PRIVILEGES FILE RELOAD
ALTER INDEX SELECT
CREATE INSERT SHUTDOWN
DELETE PROCESS UPDATE
DROP REFERENCES USAGE
ALL est un synonyme de for
ALL PRIVILEGES.
REFERENCES n'est pas encore implémenté.
USAGE est actuellement synonyme de ``aucun droits''.Il peut être utilisé pour créer un utilisateur sans droits.
Pour enlever le droit de grant d'un utilisateur, il faut utiliser la valeur suivante dans
priv_type :
REVOKE GRANT OPTION ON ... FROM ...;
Les seules valeurs de
priv_type qu'il est possible de spécifier sont
SELECT,
INSERT,
UPDATE,
DELETE,
CREATE,
DROP,
GRANT,
INDEX et
ALTER.
Les seules valeurs de
priv_type qu'il est possible de spécifier pour une colonne (c'est à dire, en utilisant la clause
column_list) sont
SELECT,
INSERT et
UPDATE.
Il est possible de donner les droits généraux en utilisant la syntaxe
ON *.* . Il est possible de donner des droits sur une base de données en utilisant la syntaxe
ON Nom_bdd.* syntax. Si il y a une base de données courante, et que l'on spécifie
ON *, cela revient à donner tous les droits pour la base de données courante
. (Attention: Si il n'y a pas de base de données courante, cela revient à donner des droits sur le serveur entier! )
Afin de pouvoir donner des droits à des utilisateurs d'hotes divers et variés, MySQL accepte la spécification de l'utilisateur sous la forme
user@host. Pour pouvoir spécifier des noms d'utilisateur ou d'hotes ayant des caractères spéciaux dans le nom (comme ``-''), il suffit d'entourer le nom de l'utilisateur ou de l'hote de guillemets simples (i.e.,
'test-user''test-hostname').
Les noms d'hotes peuvent avoir des caractères jokers : Par exemple,
user@"%.loc.gov" s'applique à tous les utilisateurs
user pour tous les hotes du domaine
loc.gov et
user@"144.155.166.%" s'appliquera à tous les
user pour des hotes dans le domaine
144.155.166 .
La forme simplifié
user est un synonyme de
user@"%". Note: pour autoriser des utilisateurs anonymes sur le serveur MySQL (ce qui est le comportement par défaut), il faut aussi ajouter les utilisateurs locaux, grce à la forme
user@localhost car sinon, la ligne pour l'utilisateur anonyme dans la table
mysql.user sera utilisée quand l'utilisateur essaiera de se connecter à MySQL depuis la machine locale! Les utilisateurs anonymes sont définis en insérant une ligne
User='' dans la table
mysql.user . On peut vérifier si cela s'applique en exécutant la ligne suivante :
mysql> SELECT Host,User FROM mysql.user WHERE User='';
Pour le moment, la commande
GRANT n'accepte que des hotes, tables, bases et colonnes dont le nom ne dépasse pas 60 caractères. Un nom d'utilisateur peut aller jusqu'à 16 caractères.
Les privilèges pour une table ou une colonne sont constitués du OU logique de chacun des droits. Par exemple, si la table
mysql.user précise que un utilisateur a un droit de select gloabal, cela ne peut pas être interdit par une entrée dans une base, une table ou une colonne.
Les droits pour une colonne sont calculés comme suit :
global privileges
OR (database privileges AND host privileges)
OR table privileges
OR column privileges
Dans la plupart des cas, les droits sont donnés aux utilisateurs avec les niveaux de droits, ce qui simplifie grandement la vie.
Si des droits sont donnés à un couple user/hostname qui n'existe pas dans la table
mysql.user, une entrée est insérée dans la table des droits, et elle reste valide jusqu'à ce qu'une commande
DELETE l'efface. En d'autres termes,
GRANT peut créer un utilisateur, mais
REVOKE ne l'effacera pas. Il faut le faire explicitement avec
DELETE.
A partir de MySQL 3.22.12 , lors de la création d'un nouvel utilisateur ou avec les droits globaux, un mot de passe sera affecté avec la clause
IDENTIFIED BY . Si l'utilisateur à déjà un mot de passe, il sera remplacé par le nouveau.
Attention: Lors de la création d'un utilisateur, il aucun mot de passe n'est spécifiée, cet utilisateur n'aura pas de mot de passe. C'est très imprudent.
Les mots de passe peuvent être assignés et modifiés avec la commande :
SET PASSWORD .
SET OPTION.
Lors de l'attribution de droit de niveau base , une entrée est ajoutée dans la table
mysql.db, si nécessaire. Quand toutes les privilèges poue la base de données sont supprimés avec
REVOKE, l'entrée est effacée.
Si un utilisateur n'a aucun droit sur uen table, la table n'est pas affichée quand l'utilisateur fait une requête sur cette table. La table ne sera même pas visible avec une commandes
SHOW TABLES.
La clause
WITH GRANT OPTION donne à l'utilisateur la capacité de donner à d'autres utilisateurs des droits, d'un niveau égal à ceux qu'il a déjà. Il faut être très prudent quand on attribue ce droit, car deux utilisateurs avec des droits différents peuvent rassembler leurs droits.
Il faut bien savoir que lorsqu'on donne à un utilisateur le droit de grant, tous les droits que possède cet utilisateur sont transmissible par cet utilisateur. Supposons que l'on ait donné des droits d'insertion à un utilisateur. Si on lui ajoute le droit de select sur une base, et qu'on lui ajoute en plus
WITH GRANT OPTION, l'utilisateur peut donner les droits de selection et d'insertion à tout autre utilisateur. Et si on lui ajoute encore le droit de update, il pourra aussi donner ce droit.
Il ne vaut mieux pas donner des droits de alter à un utilisateur normal. Dans ce cas, l'utilisateur peut essayer de pirater le système en renommant les tables de droits du système.
Lors de l'utilisation des droits de table ou de colonne pour un utilisateur, le serveur examine les droits de table et de colonne pour tous les utilisateurs, et cela ralentit légérement MySQL.
Quand
mysqld démarre, tous les droits sont chargés en mémoire. Les droits de table, base et colonnes prennent effet aussitôt, et les droits d'utilisateur prennent effet à la première connexion. Les modifications des tables de droits sont faites avec les fonctions
GRANT et
REVOKE et sont repercutées par le serveur immédiatement.Si les tables de droits sont modifiées à la main (avec
INSERT,
UPDATE, etc.), il faut exécuter une commande
FLUSH PRIVILEGES ou lancer l'utilitaire
mysqladmin flush-privileges pour faire prendre en compte des nouveaux droits.
Les différences les plus notables entre ANSI SQL et MySQL pour la commande
GRANT sont:
- ANSI SQL n' pas de droit de nvieau global ou base de données, et ANSI SQL ne supporte pas tous les types de droits de MySQL.
- Lors de l'effacement d'une table en ANSI SQL, tous les privilèges de cette table sont révoqués. Lors de la révocation d'un droit avec ANSI SQL, tous les privilèges qui ont été octroyés avec ce droits sont aussi révoqués. Avec MySQL, les droits peuvent être abandonnés uniquement avec la commande
REVOKE ou en manipulant (avec précautions) les tables de droits.