4.3 Gestion des comptes utilisateurs de MySQL
4 Administration du serveur
Manuel de Référence MySQL 4.1 : Version Française
. Syntaxe de GRANT et REVOKE . Nom d'utilisateurs MySQL et mots de passe . Quand les modifications de privilèges prennent-ils effets ? . Création des premiers droits MySQL ->Ajouter de nouveaux utilisateurs à 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
|
4.3.5 Ajouter de nouveaux utilisateurs à MySQL
Vous pouvez ajouter des utilisateurs de deux façons différentes : en utilisant
la commande
GRANT
ou en 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'erreurs. Syntaxe de
GRANT
et
REVOKE
.
Il y'a aussi beaucoup de programmes contribués comme
phpmyadmin
qui peuvent
être utilisés pour créer et administrer les utilisateurs. Portails MySQL .
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 précédente. 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.
Vous pouvez ajouter de nouveaux utilisateurs en utilisant des commandes
GRANT
:
shell> mysql --user=root mysql 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 :
-
monty
-
Un super-utilisateur qui peut se connecter au serveur d'où il veut, mais qui doit
utiliser le mot de passe
'un_mot_de_passe'
pour le faire. 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
.
-
admin
-
Un utilisateur 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'êetre plus tard en utilisant d'autres instructions
GRANT
.)
-
dummy
-
Un utilisateur 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èges. 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';
|
La raison pour laquelle nous faisons deux insertions pour l'utilisateur
'custom' est que nous voulons lui donner accès à MySQL à partir de la
machine locale avec les sockets Unix et à partir de la machine distante
'whitehouse.gov' via TCP/IP.
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'iutilisateur
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, lorsqueles 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
qui suit :
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;
|
Vous pouvez aussi utiliser
xmysqladmin
,
mysql_webadmin
, et même
xmysql
pour insérer, changer et mettre à jour les valeurs dans les tables
de droits. Vous pouvez trouver ces utilitaires dans le dossier des contributions
du site web de MySQL ( http://www.mysql.com/Downloads/Contrib/ ).
|