Académique Documents
Professionnel Documents
Culture Documents
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
Droit/privilge select
Attribut select_priv
insert update
insert_priv
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
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_priv show_view_priv
create_routine_priv alter_routine_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
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
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
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.
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.
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.
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).
-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.