FAQ MySQLConsultez toutes les FAQ

Nombre d'auteurs : 16, 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.


SommaireAdministrationUtilisateurs et privilèges (13)
précédent sommaire suivant
 

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.%' ;
La commande CREATE USER n'existe qu'à partir de la version 5.0.2. Pour les versions antérieures, il faut utiliser l'une des deux autres méthodes.

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' ;
Méthode 3 : Manipuler les tables des droits (user, db, tables_priv) dans la base mysql. Voir la doc MySQL : http://dev.mysql.com/doc/refman/5.0/...ing-users.html. Cette méthode est risquée car une erreur peut bloquer votre accès à MySQL (sauvegardez votre base avant !). N'oubliez pas le FLUSH PRIVILEGES à la fin (voir Qu'est-ce que la base mysql).

Mis à jour le 16 juin 2004 Alexandre T Antoun

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.

Mis à jour le 31 août 2008 Antoun

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é.

Mis à jour le 31 août 2008 Antoun

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).

Mis à jour le 22 avril 2014 ced

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
Si le mot de passe a déjà été défini, lancez la commande suivante dans un terminal :

Code sql : Sélectionner tout
mysqladmin -u root -p ANCIEN_MOT NOUVEAU_MOT

Mis à jour le 9 octobre 2010 ced

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

Mis à jour le 16 juin 2004 Alexandre T

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.

Mis à jour le 16 juin 2004 Florian

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;
http://dev.mysql.com/doc/mysql/fr/User_resources.html

Mis à jour le 16 juin 2004 Alexandre T

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' ;
L'utilisateur peut alors fournir n'importe quel nom, ou même ne pas en donner du tout.

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.%').

Mis à jour le 31 août 2008 Antoun

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.

Mis à jour le 31 août 2008 Antoun

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.

Mis à jour le 31 août 2008 Antoun

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.

Mis à jour le 31 août 2008 Antoun

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.

Mis à jour le 28 décembre 2008 Alain Defrance

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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 © 2017 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.

 
Contacter le responsable de la rubrique MySQL