57 votes

MySQL : création d'un utilisateur pouvant se connecter à partir de plusieurs hôtes

J'utilise MySQL et j'ai besoin de créer un compte qui peut se connecter à partir de l'hôte local ou d'un autre serveur, c'est-à-dire 10.1.1.1. Je fais donc ce qui suit :

CREATE USER 'bob'@'localhost' IDENTIFIED BY 'password123';
CREATE USER 'bob'@'10.1.1.1' IDENTIFIED BY 'password123';
GRANT SELECT, INSERT, UPDATE, DELETE on MyDatabse.* to 'bob'@'localhost', 'bob'@'10.1.1.1';

Cela fonctionne bien, mais existe-t-il un moyen plus élégant de créer un compte d'utilisateur lié à plusieurs adresses IP ou faut-il procéder de cette manière ?

Ma principale crainte est qu'à l'avenir, les autorisations soient mises à jour pour un compte "bob" mais pas pour l'autre.

41voto

Warner Points 23292

Si vous souhaitez restreindre l'accès à l'hôte et que vous ne voulez pas spécifier un sous-réseau ou un caractère générique en utilisant la fonction % C'est la seule façon de procéder. Plus de détails sont disponibles dans le Documentation MySQL .

J'essaie toujours de trouver des moyens d'éliminer la surcharge lors de la gestion de l'authentification sur de grandes installations MySQL et je n'ai pas encore trouvé de solution parfaite.

26voto

Chaminda Bandara Points 529

Commençons par créer un nouvel utilisateur appelé "chaminda" dans le Shell de MySQL :

CREATE USER 'chaminda'@'%' IDENTIFIED BY 'password';

La première chose à faire est de donner à l'utilisateur les autorisations nécessaires et ici j'ai donné toutes les autorisations à l'utilisateur en question.

GRANT ALL PRIVILEGES ON * . * TO 'chaminda'@'%';

Recharger tous les privilèges.

FLUSH PRIVILEGES;

Si vous souhaitez autoriser une série d'adresses IP à un utilisateur particulier, procédez comme suit 10.1.1.%

GRANT ALL PRIVILEGES ON * . * TO 'chaminda'@'10.1.1.%';

Remarque : Ici, Nom de l'hôte = %, ce qui signifie que vous pouvez accéder à ce serveur de base de données à partir de n'importe quel hôte. Accorder tous les privilèges à l'utilisateur est un risque important et ce n'est pas une bonne pratique. De plus, vous pouvez remplacer l'utilisateur 'chaminda' par 'bob'.

3voto

rosco Points 21

La réponse de Warner peut être affinée en utilisant des plages CIDR dans votre spécification d'utilisateur (en notation "réseau"/"masque de réseau"), par exemple :

CREATE USER 'bob'@'10.0.0.0/255.0.0.0' IDENTIFIED BY 'password123' ;

CREATE USER 'bob'@'192.168.0.0/255.255.255.192' IDENTIFIED BY 'password123' ;

Cette construction permet un contrôle d'accès plus fin. La réponse de Warner permettra à l'utilisateur "bob" de se connecter à partir de n'importe quel hôte, n'importe où sur votre réseau (ou à partir de n'importe quel hôte sur l'internet public, si votre serveur est exposé au réseau public), ce qui ne conviendra probablement pas à tous les cas d'utilisation.

Il est d'usage d'appliquer le principe de la "défense en profondeur", qui consiste à limiter l'accès des utilisateurs aux seules adresses d'hôtes désirées et fiables. N'oubliez pas non plus de limiter les connexions entrantes au niveau de l'hôte en reflétant les adresses d'hôte souhaitées et de confiance dans votre pare-feu basé sur l'hôte (par exemple, iptables, firewalld, etc.).

-4voto

GabrielC Points 257

MySQL autorise l'utilisation de plusieurs caractères génériques dans une même ligne. Une solution possible consiste à définir Host pour l'utilisateur Bob être

locahost/10.1.1.1

Référence :

http://dev.mysql.com/doc/refman/5.1/en/connection-access.html

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X