Nom d'utilisateurs MySQL et mots de passe
<<<
Ajouter de nouveaux utilisateurs à MySQL Supprimer un compte utilisateur de MySQL
>>>

5.5 Gestion des comptes utilisateurs de MySQL
5 Administration du serveur
 Manuel de Référence MySQL 4.1 : Version Française

Nom d'utilisateurs MySQL et mots de passe
->Ajouter de nouveaux utilisateurs à MySQL
Supprimer un compte utilisateur de MySQL
Limiter les ressources utilisateurs
Configurer les mots de passe
Garder vos mots de passe en lieu sûr
Utilisation des connexions sécurisées

5.5.2 Ajouter de nouveaux utilisateurs à MySQL

Vous pouvez ajouter des utilisateurs de deux façons différentes :
  • en utilisant la commande GRANT
  • manipulant la table des droits de MySQL directement
La méthode préférée consiste à utiliser la commande GRANT , car elle est plus concise et qu'il y a moins de risques d'erreur. Sa syntaxe est présentée dans la section Syntaxe de GRANT et REVOKE .

Il y a aussi beaucoup de programmes utilitaires comme phpmyadmin qui peuvent être utilisés pour créer et administrer les utilisateurs.

Les exemples suivants montrent comment utiliser le client mysql pour créer de nouveaux utilisateurs. Ces exemples supposent que les privilèges sont attribués en accord avec les valeurs par défaut discutées dans la section Sécurisation des comptes MySQL initiaux . Cela signifie que pour effectuer des changements, vous devez être sur la même machine où mysqld tourne, vous devez vous connecter en tant qu'utilisateur MySQL root , et l'utilisateur root doit avoir le droit INSERT sur la base mysql et le droit d'administration RELOAD . Si vous avez changé le mot de passe de l'utilisateur root , vous devez le spécifier dans les commandes mysql ci-dessous.

D'abord, utilisez le programme client mysql pour vous connecter au serveur MySQL en tant qu'utilisateur root :


shell> mysql --user=root mysql
Vous pouvez ajouter de nouveaux utilisateurs en utilisant des commandes GRANT :

mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     IDENTIFIED BY 'un_mot_de_passe' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     IDENTIFIED BY 'un_mot_de_passe' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';
Ces commandes GRANT ajoutent trois nouveaux utilisateurs :
  • Deux comptes de super-utilisateur qui utilisent le mot de passe 'un_mot_de_passe' . Les deux comptes ont tous les droits sur le serveur. Un des comptes, 'monty'@'localhost' , peut être utilisé depuis la machine locale. L'autre depuis n'importe quel autre serveur : 'monty'@'%' . Notez que nous devons exécuter une commande GRANT pour 'monty'@'localhost' et 'monty'@'%' . Si nous n'ajoutons pas l'entrée avec localhost , l'entrée concernant l'utilisateur anonyme pour localhost qui est créée par mysql_install_db prendra précédence lors de la connexion à partir de l'hôte local, car elle a une entrée plus spécifique pour la valeur du champ Host et de plus, elle vient en premier dans l'ordre de tri de la table user . Les tris de la table user sont présentés dans la section Contrôle d'accès, étape 1 : vérification de la connexion .
  • Un utilisateur admin qui peut se connecter depuis localhost sans mot de passe et qui a les droits administratifs RELOAD et PROCESS . Cela permet à cet utilisateur d'exécuter les commandes mysqladmin reload , mysqladmin refresh , et mysqladmin flush-* , ainsi que mysqladmin processlist . Aucun droit lié aux bases de données n'est donné. Ils peuvent l'être plus tard en utilisant d'autres instructions GRANT .
  • Un utilisateur dummy qui peut se connecter sans mot de passe, mais seulement à partir de l'hôte local. Les droits globaux sont tous à 'N' : le type de droit USAGE vous permet de créer un utilisateur démuni de privilège. Il est supposé que vous lui assignerez les droits spécifiques aux bases de données plus tard.

Vous pouvez ajouter les mêmes droits d'accès aux utilisateurs en utilisant directement des requêtes INSERT puis en demandant au serveur de recharger les tables de droits :


shell> mysql --user=root mysql
mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('un_mot_de_passe'),
    ->          'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user VALUES('%','monty',PASSWORD('un_mot_de_passe'),
    ->          'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user SET Host='localhost',User='admin',
    ->           Reload_priv='Y', Process_priv='Y';
mysql> INSERT INTO user (Host,User,Password)
    ->                  VALUES('localhost','dummy','');
mysql> FLUSH PRIVILEGES;
Selon votre version de MySQL, vous pouvez avoir un nombre différent de valeurs 'Y' plus haut (les versions antérieures à la 3.22.11 possèdent moins de colonnes de privilèges). Pour l'utilisateur admin , la syntaxe d' INSERT étendue la plus lisible disponible depuis la version 3.22.11 est utilisée.

Notez que pour ajouter un super-utilisateur, vous avez juste besoin de créer une entrée dans la table user avec tous les champs de droits à 'Y' . Aucune entrée n'est requise dans les tables db et host .

Les colonnes de privilèges de la table user n'étaient pas renseignées explicitement dans la dernière requête INSERT (pour l'utilisateur dummy ), ses colonnes prennent donc la valeur par défaut, 'N' . C'est la même chose que ce que fait GRANT USAGE .

L'exemple suivant ajoute un utilisateur custom qui peut se connecter à partir des hôtes localhost , server.domain , et whitehouse.gov . Il ne pourra accéder à la base de données bankaccount qu'à partir de localhost , à la base expenses qu'à partir de whitehouse.gov , et à la base customer à partir des trois hôtes. Il utilisera le mot de passe stupid pour les trois hôtes.

Pour configurer les privilèges de cet utilisateur en utilisant des commandes GRANT , exécutez ce qui suit :

shell> mysql --user=root mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
    ->     ON bankaccount.*
    ->     TO custom@localhost
    ->     IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
    ->     ON expenses.*
    ->     TO custom@whitehouse.gov
    ->     IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
    ->     ON customer.*
    ->     TO custom@'%'
    ->     IDENTIFIED BY 'stupid';
Les trois comptes peuvent être utilisés comme suit :
  • Le premier compte a accès à la base bankaccount , mais uniquement depuis l'hôte local.
  • Le second compte peut accéder à la base expenses , mais uniquement depuis l'hôte whitehouse.gov .
  • Le troisième compte peut accéder à la base customer , mais uniquement depuis l'hôte server.domain .
Pour régler les permissions d'accès en modifiant directement les tables de droits, exécutez ces commandes (notez l'appel à FLUSH PRIVILEGES à la fin) :

shell> mysql --user=root mysql
mysql> INSERT INTO user (Host,User,Password)
    -> VALUES('localhost','custom',PASSWORD('stupid'));
mysql> INSERT INTO user (Host,User,Password)
    -> VALUES('server.domain','custom',PASSWORD('stupid'));
mysql> INSERT INTO user (Host,User,Password)
    -> VALUES('whitehouse.gov','custom',PASSWORD('stupid'));
mysql> INSERT INTO db
    -> (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
    ->  Create_priv,Drop_priv)
    -> VALUES
    -> ('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO db
    -> (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
    ->  Create_priv,Drop_priv)
    -> VALUES
    -> ('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO db
    -> (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
    ->  Create_priv,Drop_priv)
    -> VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y');
mysql> FLUSH PRIVILEGES;
Les trois premières requêtes INSERT ajoute les entrées dans la table user qui permettent l'utilisateur custom à se connecter à partir de plusieurs hôtes avec le mot de passe donné, mais ne lui donnent aucun droit (tous les droits sont mis à la valeur par défaut qui est 'N' ). Les trois requêtes INSERT suivantes ajoutent des entrées dans la table db qui autorisent custom à utiliser les bases de données bankaccount , expenses , et customer , mais seulement s'il y accède à partir de l'hôte spécifié. Comme d'habitude, lorsque les tables de droits sont modifiées directement, on doit demander au serveur des les recharger (avec FLUSH PRIVILEGES ) pour que les changements soient pris en compte.Si vous voulez donner un accès spécifique à un utilisateur à partir de n'importe quelle machine d'un domaine donné, vous pouvez utiliser la commande GRANT , en utilisant '%' comme joker dans le nom de l'hôte :

mysql> GRANT ...
    ->     ON *.*
    ->     TO monutilisateur@"%.mondomaine.com"
    ->     IDENTIFIED BY 'monmotdepasse';
Pour faire la même chose en modifiant directement la table de droits, faites :

mysql> INSERT INTO user VALUES ('%.mondomaine.com', 'monutilisateur',
    ->             PASSWORD('monmotdepasse'),...);
mysql> FLUSH PRIVILEGES;

<< Ajouter de nouveaux utilisateurs à MySQL >>
Nom d'utilisateurs MySQL et mots de passe Gestion des comptes utilisateurs de MySQL Supprimer un compte utilisateur de MySQL