FAQ MySQLConsultez toutes les FAQ
Nombre d'auteurs : 15, nombre de questions : 155, dernière mise à jour : 22 avril 2014 Ajouter une question
Cette FAQ a été conçue à partir des questions fréquemment posées sur le forum MySQL de Developpez.com. Elle ne prétend pas à être exhaustive et peut contenir des erreurs occasionnelles. Si vous relevez une coquille, n'hésitez pas à nous le faire savoir.
Pour participer à cette FAQ, veuillez envoyer vos réponses sur le forum.
- Comment créer un compte utilisateur ?
- Les apostrophes sont-elles obligatoires autour du nom d'utilisateur et de son hôte ?
- Peut-on créer des comptes sans mot de passe ?
- Comment faire quand on a perdu le mot de passe root ?
- Comment modifier le mot de passe root ?
- Comment donner des droits à un utilisateur sur certaines tables/bases ?
- Quels sont les types de privilèges (droits) que l'on peut accorder aux utilisateurs ?
- Comment limiter les ressources de certains utilisateurs (trop gourmands) ?
- Peut-on autoriser des connexions anonymes ?
- Qu'est-ce que la base [I]mysql[/I] ?
- Qu'est-ce que la table [I]host[/I] de la base [I]mysql[/I]
- A quel moment les modifications de privilèges sont-elles appliquées aux utilisateurs ?
- Peut-on gérer les utilisateurs par groupes ou par rôles ?
Méthode 1 : Avec CREATE USER.
Code sql : | Sélectionner tout |
1 2 3 4 5 | -- avec mot de passe CREATE USER toto@'192.168.%' IDENTIFIED BY 'tata' ; -- sans mot de passe CREATE USER toto@'192.168.%' ; |
Méthode 2 : En faisant directement un GRANT à un utilisateur encore inexistant.
Code sql : | Sélectionner tout |
1 2 | -- mot de passe obligatoire si l'utilisateur doit être créé GRANT SELECT, INSERT, UPDATE ON mabase.matable TO toto@'192.168.%' IDENTIFIED BY 'tata' ; |
Dans les requêtes DCL* de MySQL, les comptes s'écrivent username@host. Le username et le host peuvent s'écrire entre apostrophes ou non. Les quatre écritures suivantes sont donc synonymes : toto@localhost, 'toto'@localhost, toto@'localhost', 'toto'@'localhost'. Les apostrophes sont obligatoires si le mot contient un caractère spécial. Pour l'hôte, c'est notamment le cas des jokers ou du / précédant un masque. De la même manière, l'utilisateur anonyme s'écrit '' (deux apostrophes).
A l'inverse, si vous manipulez directement les données de la base mysql sans passer par le DCL, user et host doivent être considérés comme deux colonnes VARCHAR séparées. L'écriture username@host ne sera donc pas reconnue.
*Le Data Control Language est la sous-partie du SQL comprennant les commandes SQL relatives aux utilisateurs et à leurs privilèges : GRANT, REVOKE, CREATE USER, RENAME USER et DROP USER.
MySQL accepte les comptes sans mot de passe. L'utilisateur devra alors éviter de saisir un mot de passe à l'authentification. Tenter de se connecter avec un mot de passe sur un compte sans mot de passe entraîne un rejet.
Créer des comptes sans mot de passe est évidemment déconseillé pour des raisons de sécurité.
Avec MySQL 5.0, la procédure à suivre (sous les systèmes d'exploitation Windows et Unix) est décrite dans la documentation officielle (en français).
Avec MySQL 5.1, la procédure à suivre diffère légèrement (sous les systèmes d'exploitation Windows et Unix) et est décrite dans la documentation officielle (en anglais).
Avec MySQL 5.5, la procédure à suivre (sous les systèmes d'exploitation Windows et Unix) est décrite dans la documentation officielle (en anglais).
Si le mot de passe n'a jamais été configuré, lancez la commande suivante dans un terminal :
Code sql : | Sélectionner tout |
mysqladmin -u root password MOT_DE_PASSE
Code sql : | Sélectionner tout |
mysqladmin -u root -p ANCIEN_MOT NOUVEAU_MOT
Les commandes GRANT et REVOKE permettent aux administrateurs de la base de données de rajouter ou supprimer des utilisateurs et de leur donner ou de leur retirer des droits. Vous pouvez être très précis dans l'attribution de ces droits.
http://dev.mysql.com/doc/refman/5.0/fr/grant.html
Voici la liste des privilèges telles qu'elle est fournie par le manuel de référence de la version 4.0.3.
- ALL [PRIVILEGES] Autorise tous les privilèges simple, sans pouvoir les transmettre ("WITH GRANT OPTION" n'est pas inclus)
- ALTER Autorise l'usage de ALTER TABLE
- CREATE Autorise l'usage de CREATE TABLE
- CREATE TEMPORARY TABLES Autorise l'usage de CREATE TEMPORARY TABLE
- DELETE Autorise l'usage de DELETE
- DROP Autorise l'usage de DROP TABLE.
- EXECUTE Autorise l'utilisateur à éxécuter des procédures stockées (pour MySQL 5.0)
- FILE Autorise l'usage de SELECT ... INTO OUTFILE et LOAD DATA INFILE
- INDEX Autorise l'usage de of CREATE INDEX et DROP INDEX
- INSERT Autorise l'usage de INSERT
- LOCK TABLES Autorise l'usage de LOCK TABLES sur les tables où le privilège SELECT est détenu
- PROCESS Autorise l'usage de SHOW FULL PROCESSLIST
- REFERENCES Pour les versions futures
- RELOAD Autorise l'usage de FLUSH
- REPLICATION CLIENT Donne le droit à l'utilisateur de demander où sont les maitres/esclaves.
- REPLICATION SLAVE Nécessaire pour les esclaves de réplication (pour lire les journaux binaires depuis les maitre).
- SELECT Autorise l'usage de SELECT
- SHOW DATABASES Autorise l'usage de SHOW DATABASES pour montrer toutes les bases
- SHUTDOWN Autorise l'usage de l'arrêt par mysqladmin
- SUPER Autorise une connexion (une seule fois) même si le nombre maximum de connexions est atteint, ainsi que l'usage de CHANGE MASTER, KILL processus,debugage par mysqladmin, PURGE MASTER LOGS et SET GLOBAL
- UPDATE Autorise l'usage de UPDATE
- USAGE Synonyme pour aucun privilèges
Les privilèges CREATE TEMPORARY TABLES, EXECUTE, LOCK TABLES, REPLICATION ..., SHOW DATABASES et SUPER existent à partir de la version 4.0.2. Pour utiliser ces nouveaux privilèges après une mise à jour, vous devez exécuter le script mysql_fix_privilege_table.
Dans les versions antérieures de MySQL, le privilège PROCESS donne les mêmes droits que le nouveau privilège SUPER.
Vous pouvez préciser le nombre de requêtes maximal, le nombre de mises à jour maximal et surtout le nombre de connexions maximal (le tout en nombre par heure).
Code sql : | Sélectionner tout |
1 2 3 | GRANT ... WITH MAX_QUERIES_PER_HOUR N1 MAX_UPDATES_PER_HOUR N2 MAX_CONNECTIONS_PER_HOUR N3; |
MySQL permet de créer des comptes sans username (et éventuellement sans mot de passe non plus).
Code sql : | Sélectionner tout |
CREATE USER ''@'%' IDENTIFIED BY 'omnibus' ;
Du point de vue de la sécurité, la création de comptes anonymes est évidemment fortement déconseillée.
La présence d'un compte anonyme lié à un hôte spécifique peut également bloquer tous les utilisateurs dont le compte est lié à un hôte moins spécifique. Supposons par exemple que vous utilisiez habituellement le compte toto@'%'. L'administrateur décide de créer un compte anonyme ouvert à tout le réseau local, soit ''@'192.168.%'. A votre prochaine connexion depuis un poste en 192.168, MySQL vous identifiera comme ''@'192.168.%'. En effet, '' est moins spécifique que 'toto', mais 192.168.% est plus spécifique que % tout court ; comme il accorde la priorité à la spécificité de l'hôte, MySQL préfère un compte anonyme lié à un hôte spécifique qu'un compte nommé lié à un hôte générique. Au final, votre tentative de connexion sera refusée pour mauvais mot de passe (à moins bien sûr que vous n'ayez le même mot de passe que ''@'192.168.%').
Un serveur MySQL comprend toujours deux bases de données système : information_schema, qui contient les vues système du catalogue (cf le tutoriel Le catalogue MySQL), et mysql, qui contient les comptes utilisateur et leurs privilèges. Les principales tables de cette base sont user (comptes, mot de passe et privilèges globaux), db (privilèges accordés pour une base de données entière), tables_priv (privilèges accordés table par table) et column_priv (privilèges accordés colonne par colonne). Il est possible d'administrer les utilisateurs en modifiant les données de la base mysql. Comme le contenu de cette base est intégralement chargé en mémoire au démarrage du serveur, il sera nécessaire de le recharger avec un FLUSH PRIVILEGES. A l'inverse, le FLUSH n'est pas nécessaire avec les ordres DCL (GRANT, REVOKE, etc.) qui impactent automatiquement la copie en mémoire vive de la base mysql.
Les privilèges accordés au niveau base de données peuvent être conditionnés à l'hôte de l'utilisateur. Pour cela, vous devez manipuler directement la base mysql. Il faut indiquer '' (chaîne vide) dans la colonne host de la table db, ce qui signifie "selon la table host". Dans la colonne host de la table host, vous placez les hôtes autorisés pour la db en question, avec leurs privilèges. Pour plus de détails : http://dev.mysql.com/doc/refman/5.0/...st-access.html.
Les modifications au niveau des objets de base de données (tables, colonnes, etc.) prennent effet à la prochaine requête de l'utilisateur. Les modifications au niveau base de données prennent effet au prochain changement de base de données courante (USE) de l'utilisateur. Les modifications au niveau global prennent effet à la prochaine connexion.
Non, MySQL n'implémente toujours pas cette gestion des comptes par groupe et rôles.
Cette gestion ne semble pas être une priorité pour les développeurs de MySQL.
Son implémentation n'est d'ailleurs pas non plus prévue pour MySQL 6.
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.