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 Section 13.5.1.3, « 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
Section 2.5.3, « Création des premiers droits MySQL ». 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 Section 5.5.5, « 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;
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.