• Aucun résultat trouvé

MAX_CONNECTIONS_PER_HOUR 5

Dans le document MySQL-Droits-Dictionnaire - Cours et TP (Page 32-48)

MAX_USER_CONNECTIONS 2;

BASES DE DONNÉES – Utilisateurs – Droits - Dictionnaires - page 33/69 - Bertrand LIAUDET

Précisions – 1 : PT 1

La notion de privilège est identique à celle de droit.

Standard SQL

La gestion des privilèges MySQL suit en partie la norme SQL.

Il lui manque la gestion des rôles qu’on trouve sous ORACLE (un rôle est une sorte d’utilisateur abstrait avec des droits. Un utilisateur concret peut alors avoir certains rôles).

Elle distingue les utilisateurs selon leur hôte : la machine d’où ils se connectent.

Effectivité des privilèges

Les privilèges de niveau utilisateur seront effectifs immédiatement pour toute nouvelle connexion mais ne sont pas effectifs pour les connexions en cours.

Les privilèges de niveau BD seront effectifs immédiatement pour toute nouvelle utilisation d’une BD (use database) mais ne sont pas effectifs pour la BD en cours d’utilisation.

Les privilèges de niveau tables et colonnes seront effectifs immédiatement pour toute nouvelle utilisation de la table et de la colonne.

Précisions – 2 : Donner des privilèges : GRANT … ON … TO Syntaxe simplifiée

GRANT privilege [,privilege] ON composant TO user[@host]

[IDENTIFIED BY motDePasse] [WITH GRANT OPTION]

Syntaxe complète

GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...

ON {tbl_name | * | *.* | db_name.*}

TO user [IDENTIFIED BY [PASSWORD] 'password']

[, user [IDENTIFIED BY [PASSWORD] 'password']] ...

[WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR count | MAX_UPDATES_PER_HOUR count

| MAX_CONNECTIONS_PER_HOUR count]]

Création d’utilisateur avec GRANT

Le GRANT s’applique à un utilisateur existant déjà. S’il n’existe pas, le GRANT fait office de CREATE USER. C’est à cela que sert le IDENTIFIED BY…

Tous les privilèges

Mot clé : ALL ou ALL PRIVILEGES à la place d’une liste de privilèges particuliers.

Exemples

Création d’un utilisateur avec tous les droits :

mysql> GRANT ALL PRIVILEGES ON *.* TO admin2@localhost IDENTIFIED BY 'mdpAdmin' WITH GRANT OPTION;

Donner des droits de consultation sur certaines colonnes :

mysql> GRANT SELECT (ne, nom) ON empdept.emp TO toto@’%’;

BASES DE DONNÉES – Utilisateurs – Droits - Dictionnaires - page 35/69 - Bertrand LIAUDET

Précisions – 3 : Consulter les privileges : SHOW GRANTS FOR Syntaxe

SHOW GRANTS [FOR user];

Exemple

Consultation des droits d’un utilisateur: pour pouvoir voir les privilèges, il faut avoir l’accès à la BD mysql.

mysql> SHOW GRANTS FOR admin2@'localhost';

+---+

| Grants for admin2@localhost |

+---+

| GRANT ALL PRIVILEGES ON *.* TO 'admin2'@'localhost' IDENTIFIED BY PASSWORD '*65D70AAC97E173AC4521B06CED3F332D9CB6E2E4' WITH

GRANT OPTION |

+---+

1 row in set (0.00 sec)

Consultation de ses propres droits : tout utilisateur, quels que soient ses droits, peut les consulter mysql> SHOW GRANTS;

Précisions - 4 : Retirer des privileges : REVOKE … ON … FROM … Syntaxe simplifiée

REVOKE privilege [,privilege] ON composant FROM user[@host]

Syntaxe complète n°1

REVOKE privilege [(column_list)] [* , privilege [(column_list)]]

ON [composant] priv_level FROM user[@host] [*, user[@host]] Syntaxe complète n°2

Pour supprimer tous les droits et le GRANT OPTION

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user[@host] [*,

user[@host]] Exemples

Suppression d’un droit

mysql> REVOKE select (nom) on empdept.emp from toto@’%’;

Suppression de tous les droits sauf le grant option:

mysql> REVOKE all on *.* from admin2@localhost;

Suppression du droit de grant :

mysql> REVOKE grant option on *.* from admin2@localhost;

Suppression de tous les droits et du grant option :

mysql> revoke all, grant option from admin2@localhost;

A noter qu’il n’y a plus de « on *.* » Transitivité du grant option

Sous Oracle, si un utilisateur u1 donne des droits à un utilisateur u2 sur une BD1, que l’utilisateur u2 donne des droit à u3 sur BD1 et que finalement u1 retire les droits à u2 sur BD1, alors, automatiquement, u3 perd ses droits sur BD1. Ce n’est pas le cas avec MySQL.

BASES DE DONNÉES – Utilisateurs – Droits - Dictionnaires - page 37/69 - Bertrand LIAUDET

Précisions - 5 : Limiter les ressources des comptes

http://dev.mysql.com/doc/refman/5.0/fr/user-resources.html Limiter les ressources globalement

Variable système :

• max_connections : vaut 100 par défaut.

• max_user_connections. Vaut 0 par défaut (il n’y a alors pas de limites).

Limiter les ressources d’un utilisateur

Il y a 4 possibilités de limitation des ressources au niveau des droits :

• Nombre de connexions

• Nombre de connexions par heure

• Nombre de requête par heure

• Nombre de modifications par heure

Ce sont des privilèges client de niveau user (globaux).

Ils mettent à jour les attributs max_user_connections, max_connections (par heure) max_questions et max_updates dans mysql.user.

Exemples

Création des limites

mysql> GRANT USAGE ON *.* TO 'toto'@'localhost' WITH MAX_QUERIES_PER_HOUR 20

MAX_UPDATES_PER_HOUR 10 MAX_CONNECTIONS_PER_HOUR 5 MAX_USER_CONNECTIONS 2;

Les types de limite peuvent être appelés dans n'importe quel ordre.

Si la commande GRANT n'a pas de clause WITH, les limites valent alors 0, c'est à dire qu'il n'y a pas de limite.

Modification de limites

mysql> GRANT USAGE ON *.* TO 'toto'@'%' WITH MAX_QUERIES_PER_HOUR 100;

Suppression de limites

Pour supprimer une limite existante, on lui donne la valeur 0.

mysql> GRANT USAGE ON *.* TO 'toto'@'%' WITH MAX_QUERIES_PER_HOUR 0;

Le compteur d'utilisation des ressources se met en marche dès que la limite n'est pas nulle.

Remise à zéro des comptes

L’administrateur peut remettre les compteurs à zéro pour tous les comptes (ce n’est pas la même chose que d’annuler les limites !)

mysql> flush user_resources;

ou bien

mysql> flush privileges ; ou bien

shell> mysqladmin reload ;

Pour remettre à zéro les compteurs d’un seul compte, il suffit de refaire un grant usage en redonnant la valeur des limites.

BASES DE DONNÉES – Utilisateurs – Droits - Dictionnaires - page 39/69 - Bertrand LIAUDET

Organisation des privilèges

2 CLASSES de privilèges : serveur et client

Les classes de privilèges concernent les utilisateurs des privilèges :

Les privilèges serveur : concernent l’administrateur et les développeurs d’applications.

Les privilèges client : concernent les applications.

4 NIVEAUX de privilèges : user, BD, table, attribut

Les niveaux de privilèges concernent l’objet de la BD qui porte le privilège.

On distingue 4 niveaux hiérarchiques d’intervention : utilisateur, BD, table et attribut.

Niveau 1 : utilisateur ( = global)

Les droits globaux s'appliquent à un utilisateur.

Ils concernent toutes les bases de données d'un serveur.

Ces droits sont stockés dans la table mysql.user.

Niveau 2 : BD

Les droits de niveau BD s'appliquent à toutes les tables d'une base de données.

Ces droits sont stockés dans la table mysql.db Niveau 3 : table et procédure

Les droits de niveau table s'appliquent à toutes les colonnes et à tous les tuples d'une table.

Les droits de niveau procédure s’appliquent aux procédures d’une BD.

Ces droits sont stockés dans la table mysql.tables_priv et mysql.procs_priv.

Il s’agit essentiellement de DELETE, CREATE, ALTER, DROP Niveau 4 : colonne

Les droits de niveau colonne s'appliquent à certaines colonnes et certains tuples d’une table.

Ces droits sont stockés dans la table mysql.columns_priv.

Il s’agit de INSERT, UPDATE et SELECT.

Héritage des privilèges

Un privilège de niveau N est transmis au niveau N+1 (inférieurs) : un privilège de niveau « user » (1) existe au niveau « colonne » (4)

Liste des privilèges : SHOW PRIVILEGES

Nom Classe Niveau Principe

ALL [PRIVILEGES] Serveur 1 : User Tous les privilèges, sauf WITH GRANT OPTION CREATE USER Serveur 1 : User Autorise l'utilisation de CREATE USER

PROCESS Serveur 1 : User Autorise l'utilisation de SHOW FULL ROCESSLIST.

RELOAD Serveur 1 : User Autorise l'utilisation de FLUSH.

SHUTDOWN Serveur 1 : User Autorise l'utilisation de mysqladmin shutdown.

SUPER Serveur 1 : User Autorise une connexion unique même si max_connections est atteint, et l'exécution des commandes CHANGE MASTER, KILL thread, mysqladmin debug, PURGE MASTER LOGS et ET GLOBAL.

USAGE Serveur 1 : User Pour créer un utilisateur sans droits.

FILE Client 1 : User Autorise l'utilisation de SELECT ... INTO OUTFILE et LOAD DATA INFILE.

SHOW DATABASES Client 1 : User Autorise l'utilisation de SHOW DATABASES.

Nom Classe Niveau Principe

CREATE ROUTINE Serveur 2 : BD Autorise l'utilisation de CREATE ROUTINE

LOCK TABLES Serveur 2: BD Autorise l'utilisation de LOCK TABLES sur les tables pour lesquelles l'utilisateur a les droits de SELECT.

Nom Classe Niveau Principe

ALTER Serveur 3 : Table Modification (tous les ALTER possibles) CREATE Client 3 : Table Autorise l'utilisation de CREATE.

CREATE VIEW Client 3 : Table Autorise l'utilisation de CREATE VIEW.

DELETE Client 3 : Table Autorise l'utilisation de DELETE.

DROP Serveur 3 : Table Destruction de bases ou de tables

INDEX Serveur 3 : Table Création ou suppression d’index sur une table SHOW VIEW Client 3 : Table Autorise l'utilisation de SHOW CREATE VIEW GRANT OPTION Serveur 3 : Table

et proc Autorise l’utilisation de GRANT

Nom Classe Niveau Principe

ALTER ROUTINE Client 3 : Proc Autorise l'utilisation de ALTER ROUTINE

EXECUTE Client 3 : Proc Autorise l'utilisateur à exécuter des procédures stockées (pour MySQL 5.0).

BASES DE DONNÉES – Utilisateurs – Droits - Dictionnaires - page 41/69 - Bertrand LIAUDET

Les principaux privilèges sont les suivants :

Nom Classe Niveau Droit

USAGE Serveur 1 : User Pour créer un utilisateur sans droits.

ALL [PRIVILEGES] Serveur 1 : User Tous les privilèges, sauf WITH GRANT OPTION WITH GRANT OPTION Serveur 1 : User Autorise l’utilisation de GRANT

Nom Classe Niveau Droit

CREATE Serveur 2 : BD, Table Création (toutes les créations possible) DROP Serveur 2 : BD, Table Destruction de bases ou de tables ALTER Serveur 3 : Table Autorise l'utilisation de ALTER.

Nom Classe Niveau Droit

SHOW DATABASES Client 1 : User Autorise l'utilisation de SHOW DATABASES.

SELECT Client Tuples Autorise l'utilisation de SELECT.

INSERT Client Tuples Autorise l'utilisation de INSERT.

UPDATE Client Tuples Autorise l'utilisation de UPDATE.

DELETE Client Tuples Autorise l'utilisation de DELETE.

Création de rôles sous MySQL

Définition d’un rôle

Un rôle est un profil type d’utilisateur qu’on peut ensuite affecter à un utilisateur.

Par exemple : lecteur, opérateur de saisie, administrateur du SI, etc.

MySQL ne permet pas de créer de rôle.

Solution MySQL : création d’utilisateur servant de modèle

Toutefois, on peut contourner cette impossibilité en créant des utilisateurs servant de modèle.

Ces utilisateurs seront créés sur « localhost » avec un mot de passe arbitraire.

Ces utilisateurs seront définis avec les autorisations souhaitées.

Application du modèle à un nouvel utilisateur

1) Créer un utilisateur avec son hôte et son mot de passe, sans droit.

2) Faire un SHOW GRANTS sur l’utilisateur servant de modèle 3) Appliquer les GRANT affichés à l’utilisateur qu’on a créé.

Cette séquence pourrait être écrite dans une procédure stockée.

BASES DE DONNÉES – Utilisateurs – Droits - Dictionnaires - page 43/69 - Bertrand LIAUDET

Les bases de données installées par défaut Bases de données préinstallées

mysql> show databases;

+---+

| Database | +---+

| information_schema |

| mysql |

| performance_schema |

| sys | +---+

4 rows in set (0.00 sec) Présentation

MySQL contient 4 bases de données par défaut pour gérer les données du SGBD (on dit aussi

« schema à la place de BD ».

Les BD mysql et la BD information schéma représentent le dictionnaire des données, c’est à dire des informations sur les bases de données et les utilisateurs.

La BD mysql est une première version du dictionnaire des données. On y trouve la table user.

https://dev.mysql.com/doc/refman/8.0/en/system-schema.html

La BD information_schema est le dictionnaire des données « moderne ».

https://dev.mysql.com/doc/refman/8.0/en/innodb-information-schema-transactions.html Les BD performance_schema et sys fournissent des informations de performance.

https://dev.mysql.com/doc/refman/8.0/en/performance-schema.html https://dev.mysql.com/doc/refman/8.0/en/sys-schema.html

Le dictionnaire des données 1ère version : La BD mysql

La BD mysql (version 5.5) Présentation

C’est une base de donnée qui sert surtout à gérer :

les utilisateurs et les droits.

la définition des procédures et des fonctions.

On y trouve une table « user » avec les attributs « host » et « user »

BASES DE DONNÉES – Utilisateurs – Droits - Dictionnaires - page 45/69 - Bertrand LIAUDET

Graphe des tables de droits

La colonne vertébrale du graphe est : TABLE DB USER

COLUMN_PRIVS PROC_PRIVS

TABLE_PRIVS PROC

DB (user, host, bd)

USER(user, host) HOST(host, bd)

A noter que :

L’utilisateur est caractérisé par son nom d’utilisateur et son hôte. La BD appartient à un utilisateur. Elle fait donc référence à un utilisateur.

MySQL permet aussi de définir des droits pour une BD et pour un hôte donné, quel que soit l’utilisateur.

Liste des tables

On peut voir les tables de la BD mysql en faisant un show tables mysql> show tables from mysql;

+---+

| time_zone_leap_second | fuseaux horaires

| time_zone_name | vides par défaut

BASES DE DONNÉES – Utilisateurs – Droits - Dictionnaires - page 47/69 - Bertrand LIAUDET

Manipulation des tables de la BD mysql

Les tables de la BD mysql sont modifiées par :

Les ordres DCL (data control language) : CREATE USER, RENAME USER, DROP USER, SET PASSWORD, GRANT, REVOKE.

Des ordres DML (data manipulation language) : INSERT, UPDATE, DELETE travaillant directement dans les tables de la BD mysql. C’est utile pour faire des modifications de masse et résoudre certains problèmes particuliers non gérés par le DCL.

Travailler directement sur les tables de la BD mysql n’est pas recommandé !!!

C’est parfois utile pour faire des modifications particulières.

C’est nécessaire pour la table host qui n’est pas modifiable avec les ordres du DCL.

Actualisation de la BD mysql : flush privileges Recharger les tables de droits

Au démarrage, le serveur charge en mémoire vive l’ensemble de la BD mysql.

Les modifications effectuées par les ordres du DCL sont répercutées aussi en mémoire vive.

Les modifications effectuées directement dans la BD mysql par des ordres du DML ne sont pas répercutées en mémoire vive.

Pour actualiser la mémoire vive : mysql> flush privileges On peut aussi faire :

shell> mysqladmin flush-privileges ou

shell> mysqladmin reload

Précisions – 1 : Précisions sur le contenu des tables de droit

Dans le document MySQL-Droits-Dictionnaire - Cours et TP (Page 32-48)

Documents relatifs