Vous êtes sur la page 1sur 11

MySQL : Utilisateurs et droits d'accs (Partie I)

La gestion de utilisateurs dans une base de donnes est primordiale pour assurer la scurit de la base et de ses donnes. MySQL permet de grer les utilisateurs (ajout, modification, suppression) de manire efficace grce a un systme de droits. Voici donc quelques lments qui vous feront mieux comprendre la gestion des droits. I) La base de donnes mysql II) Les diffrents droits d'accs III) L'utilisateur et ses droits IV) Cration d'un utilisateur V) Consultation des droits

I) La base de donnes mysql


La base mysql est la table principale du SGBD car elle contient toutes les tables vitales son fonctionnement. Parmi ces tables, certaines sont destines la gestion des utilisateurs et de leurs droits. Ainsi, les tables user, db, host, tables_priv et columns_priv permettent de dfinir tous les droits des utilisateurs, depuis les droits les plus basiques (droits globaux sur une base, ...) jusqu'aux droits spcifiques (droits sur une table ou une colonne de table, ...). Description des tables : Table user db host tables_priv columns_priv Rle Stocke les utilisateurs, ainsi que leurs mot de passe, hte(s) et droits globaux daccs au serveur Droits daccs des utilisateurs aux diffrentes bases de donnes, selon leur hte Droits daccs aux bases selon lhte. Si un hte nest pas indiqu dans la table db, la table host sera utilise pour vrifier que lhte le droit de se connecter la base Droits daccs dun utilisateur sur les tables dune base Droits daccs dun utilisateur sur les colonnes dune table

II) Les diffrents droits d'accs


Chaque utilisateur de la base se voit accorder diffrents privilges, qui sont mis en place sur diffrents niveaux (serveur, base, table ou colonne) et qui correspondent diffrents attributs dans les tables des droits, avec comme valeurs possibles soit "Y" pour accorder le droit, soit "N" pour le refuser. La valeur par dfaut pour un droit est "N". Voici la liste des diffrents droits :

Droit/privilge select

Description Droit deffectuer des recherches avec SELECT

Attribut select_priv

insert update

Droit deffectuer des insertions avec INSERT

insert_priv

Droit deffectuer des mises jour avec UPDATE update_priv

delete index alter create drop grant

Droit deffectuer des suppressions avec DELETE delete_priv Droit de crer et dtruire des index index_priv

Droit de modifier une table avec ALTER TABLE alter_priv Droit de crer des bases et des tables Droit de dtruire des bases et des tables create_priv drop_priv

Droit daccorder des droits dautres utilisateurs grant_priv que lui-mme Droit li aux cls trangres (uniquement pour les tables BDB et InnoDB) Permettre des tches dadministration comme lcriture sur disque des tables, recharger les privilges Droit darrter le serveur MySQL Droit de contrler les processus (threads) utilisateurs Droit dcrire ou lire des fichiers avec les commandes LOAD DATA et INTO OUTFILE references_priv

references

reload

reload_priv

shutdown process

shutdown_priv process_priv

file

file_priv

show database

Droit de visualiser le nom des diffrentes bases de dones du serveur. Ne fonctionne que si le show_db_priv serveur est lanc avec loption skip-showdatabase

super

Droit de surpasser le nombre de connexion maximum en effectuant une seule connexion super_priv pour excuter des commandes dadministration type kill Droit de crer des tables temporaires Droit de verrouiller une table create_tmp_table_priv lock_table_priv

create tmp table lock tables

execute replication slave

Droit dexcuter des procdures stockes Donne le droit lutilisateur de savoir quels serveurs sont matres et esclaves indique que lutilisateur sera utilis et sera autoris interroger un serveur matre pour la rplication dun serveur esclave Permet de grer les vues Droit dafficher une vue cre avec SHOW CREATE VIEW Permet de crer des procdures stockes Permet de modifier des procdures stockes Permet lutilisateur de crer dautres utilisateurs Permet de grer les vnements Permet de grer les triggers

execute_priv repl_slave_priv

replication client

repl_client_priv

create view show view

create_view_priv show_view_priv

create routine alter routine

create_routine_priv alter_routine_priv

create user event trigger

create_user_priv event_priv trigger_priv

maximum questions per Nombre maximum de requtes par heure pour hour lutilisateur maximum updates perhour maximum connections per hour Nombre maximum de requtes par heure modifiant les donnes pour lutilisateur Nombre maximum de connections au serveur par heure pour lutilisateur

max_questions max_updates max_connections

Attention , les droits suivants permettent l'accs des commandes MySQL uniquement utiles pour l'administrateur de la base : Droits reload shutdown process Commandes autorises relaod, refresh, flush-privileges, flush-hosts, flush-logs, fush-tables shutdown processlist, kill

Veillez donc ce qu'aucun utilisateur non averti n'ai ces droits.

Compositon des tables relatives aux droits :


User Host db Host host Host

Nom de la table Champs de "porte"

User Password

Db User

Db

Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Champs de privilges Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections

Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv

Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv

References_priv Index_priv Alter_priv

References_priv Index_priv Alter_priv

Create_tmp_table_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Lock_tables_priv Execute_priv

Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Event_priv Trigger_priv

Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv

Trigger_priv

Ce tableau indique quelle "porte" la table. Par exemple, on remarque que le droit shutdown_priv peut seulemet tre affect un utilisateur et pas une base ou un hte. Les tables tables_priv et columns_priv sont un peu diffrentes car de nouveaux champs apparaissent :
Nom de la table tables_priv Host Db Champs de "porte" User Table_name Table_priv Column_priv Timestamp Grantor Timestamp columns_priv Host Db User Table_name Column_name Champs de privilges Autres champs Table_priv

Le champ Timestamp indique la date et l'heure de dernire modification. Le champ Grantor indique quel utilisateur a donn les droits de l'utilisateur sur la table. Les droits au niveau des tables et des colonnes ne sont plus grs par des valeurs vrai/faux mais par des jeux de valeurs. Exemple pour la colonne column_priv de la table tables_priv, les valeurs possibles sont : 'Select', 'Insert', 'Update', 'References' . Conseil : Pensez d'abord a dfinir les droit globaux pour les utilisateurs (droits dans la table db) avant de dfinir des droits plus complexes sur les tables ou les colonnes (dans les tables tables_priv ou columns_priv). Regardez cet exemple pour comprendre : Nous avons cr un utilisateur 'bob' et nous voulons seulement lui donner un accs en lecture, criture et modification la table 'truc' de la base 'tralala'. Nous modifions donc naturellement la table tables_priv et cet enregistrement se trouve maintenant dans la table :
Host Db user Table_name Table_priv Column_priv localhost tralala bob truc select', 'insert', 'update' NULL

Timestamp Grantor

20080202120000 root@localhost

Selon nos plans, bob ne devrait donc pas pouvoir supprimer d'enregistrements dans la table truc. Or, sachant que la table db ne contient aucun enregistrement sur bob, l'action de supression delete n'est pas bloque pour cet utilisateur. Bob pourra donc supprimer les donnes sans aucun problme. Pour remdier ce problme, il faut ajouter cet enregistrement dans la table db :
Host Db user Select_priv Insert_priv Update_priv Delete_priv Index_priv Alter_priv Creat_priv Drop_priv Grant_priv localhost tralala bob Y N N N N N N N N

Ainsi, les droits "gnraux" de bob sur la base tralala sont fixs, et il ne lui est donc plus possible de supprimer des donnes dans cette base. Par contre, comme des droits plus complexes on t fixs sur la table truc, bob pourra toujours insrer ou modifier des enregistrements, bien que ces droits ne soit pas autoriss dans la table db.

III) L'utilisateur et ses droits


Les contrles effectus par MySQL se font en deux phases : - L'identification de l'utilisateur, avec la vrification du nom, du mot de passe et de l'hte entrs dans la commande de connexion. MySQL cherche alors dans la table user si l'utilisateur existe et s'il correspond l'hte indiqu, puis il vrifie si le mot de passe est ben celui associ l'utilisateur. Si aucun problme n'est rencontr, la connexion est accepte. - La consultation des droits pour chaque action effectue.

Connexion d'un utilisateur

La vrification d'identit utilise la table user, et plus prcisement les colonnes host, user et password. - Host prend comme valeur soit un nom d'ordinateur, soit une adresse IP, soit une valeur vide. Dans ce cas l, la table host sera consulte pour trouver les droits de l'hte de l'utilisateur. Les caractres '%' et '_' peuvent tre utiliss. Par exemple : 192.168.1.% signifie que tous les ordinateurs ayant une adresse IP entre 192.168.1.0 et 192.168.1.255 peuvent accder la base. De mme une adresse du type %.domaine.fr signifie que tous les ordinateurs du domaine domaine.fr pourront se connecter. On peut galement spcifier un masque de sous rseau pour donner une plage d'IP accessible. Par exemple : 192.168.1.0/255.255.255.0 signifie que les machines ayant une IP entre 192.168.1.1 et 192.168.1.254 pourront se connecter. - User prend comme valeur le nom d'utilisateur qui se connectera. La valeur peut tre vide, dans ce cas la cet utilisateur sera consid comme un utilisateur anonyme (anonymous). Si un utilisateur entre un mauvais login mais qu'il existe dans la base un utilisateur anonyme (ayant un hte correspondant), cet utilisateur sera connect en tant qu'anonymous. - Password prend comme valeur le mot de passe choisi par l'utilisateur. Il peut tre vide, bien que cela ne soit pas recommand. Exemple de la table user :
Host 'localhost' '%' '%.domaine.fr' '192.168.1.1 '192.168.1.% User 'root' 'toto' 'toto' '' 'toto' Password *F2E84D3EB14990103E27F92513BB854ECAA8C727 *F2E84D3EB14990103E27F92513BB854ECAA8C727 *F2E84D3EB14990103E27F92513BB854ECAA8C727 *F2E84D3EB14990103E27F92513BB854ECAA8C727 *F2E84D3EB14990103E27F92513BB854ECAA8C727 *F2E84D3EB14990103E27F92513BB854ECAA8C727

'192.168.1.0/255.255.255.0 'toto'

Rgles : -

Les htes les plus spcifiques sont considrs en premier. Par exemple, '192.168.1.1' est plus spcifique que '%.domaine.fr', qui est plus spcifique que '%' (une adresse IP est toujours plus spcifique qu'un nom d'hte) premier. Les utilisateurs spcifiques sont eux aussi considrs en Par exemple, 'toto' est plus spcifique que ' '. Les htes sont considrs avant les utilisateurs.

- Il est fortement conseill, pour plus de scurit, de supprimer les utilisateurs anonymes, ainsi que les utilisateurs root depuis des machines distantes.

IV) Cration d'un utilisateur


Au dpart, l'utilisateur root est le seul qui puisse crer d'autres utilisateurs. il sera possible ensuite de crer d'autres utilisateurs avec ce privilge. Il y a deux mthodes pour crer un utilisateur : - Insrer directement l'utilisateur dans la table user INSERT INTO user (host,user,password) VALUES ('192.168.1.1','bob','*F2E84D3EB14990103E27F92513BB854ECAA8C727'); Il faut ensuite modifier les autres tables si l'on veut augmenter ou restreindre ses privilges. Pour que l'ajout/modification soit pris en compte, il faut utiliser la commande FLUSH_PRIVILEGES pour que MySQL recharge les droits. - Attribuer directement les privilges l'utilisateur avec l'option GRANT (l'utilisateur est alors cr automatiquement s'il n'existe pas) : GRANT droit [(colonne1, colonne2, ...] [, droit [(colonne1, colonne2,...]...] ON {nom_table | * | *.* | nom_base.*} TO utilisateur [IDENTIFIED BY 'mot_de_passe'] [, utilisateur [IDENTIFIED BY 'mot_de_passe'] ...] [REQUIRE NONE | [{SSL|X509}] [CIPHER cipher [AND] ] [ISSUER issuer [AND] ][SUBJECT subject] ] [WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR # | MAX_UPDATES_PER_HOUR # | MAX_CONNECTIONS_PER_HOUR #]] Liste des droits possibles : ALL [PRIVILEGES] ALTER CREATE Tous les droits Modification de la structure des tables Crer une table ou une base

CREATE TEMPORARY Crer des tables temporaires TABLES DELETE DROP EXECUTE FILE INDEX INSERT LOCK TABLES PROCESS REFERENCES RELOAD Effacer des enregistrements Dtruire une table ou une base Excuter des procdures stockes Lire ou crire des fchiers sur disque Droit de grer des index Ajouter des enregistrements Vrouiller la table Voir la liste des processus Grer les cls trangres. Relire les droit utilisateurs

REPLICATION CLIENT REPLICATION SLAVE SELECT SHOW DATABASES SHUTDOWN SUPER UPDATE USAGE GRANT OPTION

Donne le droit l'utilisateur de savoir quels serveurs sont matres et esclaves Indique que l'utilisateur sera utilis et sera autoris interroger un serveur matre pour la rplication d'un serveur esclave Effectuer des requtes de slection Voir le nom des bases du serveur Arrter le serveur Autorise une connexion supplmentaire pour une opration de maintenance Effectuer des requtes de modification Synonyme de "aucun privilge". Ceci permet de crer des utilisateurs ayant juste le droit de se connecter au serveur Synonyme de "WITH GRANT OPTION". Signifie que l'utilisateur peut crer des utilisateurs ou modifier les droits des utilisateurs existants

IDENTIFIED BY permet de donner un mot de passe l'utilisateur REQUIRE indique des modes de connexion scuriss et leur paramtres ON nom_base.nom_table : tables sur lesquelles les droits seront appliqus nom_base.* = toutes les tables de la base nom_base *.* = toutes les tables de toutes les bases Le nom d'utilisateur peut tre spcifi avec un nom d'hte : utilisateur@hte Les caractres '%' et '_' peuvent tre utiliss pour le nom d'hte. Il existe une option safe-user-create du serveur qui empche la cration de l'utilisateur par GRANT. Pour crer un utilisateur, il faut alors avoir les droits INSERT sur la table mysql.user.
Cration d'un super utilisateur Il suffit juste de crer un utilisateur avec tous les droit sur toutes les tables :

GRANT ALL PRIVILEGES ON *.* TO nom_admin@localhost IDENTIFIED BY 'mot_de_passe' WITH GRANT OPTION; Il n'est vidememment pas recommand de multiplier les administrateurs.

Modification des droits - La commande REVOKE :

REVOKE droit [ (colonne1,colonne2 ...)] [, droit [(colonne1,colonne2 ...)] ...] ON {nom_table | * | *.* | nom_base.*} FROM utilisateur [, utilisateur ...]; Les droits sont les mmes que pour GRANT.

Si l'on supprime tous les droits d'un utilisateur, il sera toujours existant dans la base. Pour le supprimer, il faut utiliser la commande DELETE sur la table user. Attention, pour suprimer tous les droits d'un utilisateur, un REVOKE global (sur *.*) peut ne pas supprimer tous les droits. Il faut donc utiliser le REVOKE sur chaque droit cr. - L'autre mthode consiste faire un DELETE de l'utilisateur dans toutes les table o il se trouve : DELETE FROM Host='192.168.1.1'; DELETE FROM Host='192.168.1.1'; DELETE FROM Host='192.168.1.1'; DELETE FROM Host='192.168.1.1'; columns_priv WHERE user='toto' AND tables_priv WHERE user='toto' AND db WHERE user='toto' AND user WHERE user='toto' AND

Puis de recrer le mme utilisateur avec ses nouveaux droits. Modification d'un mot de passe SET PASSWORD FOR 'utilisateur'@'hte' = PASSWORD('mot_de_passe'); Il est fortement conseill, pour des raisons de scurit, de mettre un mot de passe pour tous les utilisateurs. De plus, aprs l'installation de MySQL, pensez modifier le mot de passe root (l'installation Windows permet de le faire par l'assistant, mais sous Linux le mot de passe n'est pas dfini).

V) Consultation des droits


Par requte sur les tables user, tables_priv, columns_priv et db : Par exemple SELECT host, user ,select_priv, insert_priv, update_priv, delete_priv, create_priv, frop_priv FROM user; SELECT * FROM db; etc...
Par la commande SHOW GRANTS : SHOW GRANTS FOR toto@192.168.1.1;

Par l'utilitaire mysqlaccess (sous Linux) : Dans le rpertoire bin :

$ mysqlaccess -t -d nom_base -u toto

-t : affichage sous forme de table -d : base de donne -u : utilisateur Les droits consultables par cet utilitaire ne concernet que les tables user, host et db.

Vous aimerez peut-être aussi