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;
|
|