GNU/Linux >> Tutoriels Linux >  >> Linux

Guide du débutant sur la gestion des utilisateurs MySQL

La gestion des utilisateurs dans MySQL vous permet de contrôler ce que les utilisateurs peuvent et ne peuvent pas faire.

  • Créez des comptes utilisateur avec différents privilèges adaptés à leur fonction.
  • Évitez d'utiliser le compte racine :restreignez les applications compromises et protégez-vous contre les erreurs lors de la maintenance de routine.
  • Assurez-vous de l'intégrité des données en attribuant correctement les privilèges des utilisateurs individuels. Autoriser les utilisateurs autorisés à faire leur travail. Empêcher les utilisateurs non autorisés d'accéder aux données au-delà de leurs privilèges.

Vérification du compte utilisateur

Lorsque vous vous connectez à un serveur MySQL et exécutez une requête, il vous authentifie et autorise votre activité.

  • Authentification :Vérifie l'identité de l'utilisateur. C'est la première étape du contrôle d'accès. Vous devez vous authentifier avec succès à chaque fois que vous vous connectez. Si vous ne parvenez pas à vous authentifier, votre connexion échoue et votre client se déconnecte.
  • Autorisation :Vérifie les privilèges de l'utilisateur. Cette seconde étape de contrôle d'accès a lieu pour chaque requête sur une connexion active sur laquelle l'authentification a réussi. Pour chaque requête, MySQL détermine l'opération que vous souhaitez effectuer, puis vérifie si vous disposez des privilèges suffisants pour le faire.

Afficher les paramètres du compte utilisateur

– Interrogez la base de données mysql pour afficher les informations d'identification de l'utilisateur :

mysql> SELECT user, host, password
-> FROM mysql.user WHERE user='root'; 
+------+-----------+-------------------------------------------+ 
| user | host      | password                                  | 
+------+-----------+-------------------------------------------+ 
| root | localhost | *2447D497B9A6A15F2776055CB2D1E9F86758182F | 
| root | 127.0.0.1 | *2447D497B9A6A15F2776055CB2D1E9F86758182F | 
| root | ::1       | *2447D497B9A6A15F2776055CB2D1E9F86758182F |
+------+-----------+-------------------------------------------+ 
3 rows in set (0.00 sec)

Afficher toutes les informations utilisateur, y compris les privilèges :

mysql> SELECT * FROM mysql.user\G 
***************** 1. row ***************** 
...
   Select_priv: Y
   Insert_priv: Y
   Update_priv: Y
   Delete_priv: Y
...

La base de données mysql contient les informations de tous les comptes d'utilisateurs sur le serveur. Pour afficher ces informations, exécutez les instructions SELECT présentées ci-dessus. La valeur Y dans un *_priv indique que le privilège est activé. Le compte root a un accès complet. Toutes ses colonnes de privilèges ont la valeur Y.

Outre les privilèges, la table des utilisateurs contient d'autres informations utiles dans le processus d'authentification. Par exemple, vous pouvez voir dans la sortie suivante que l'utilisateur testeur :

  • Possède un mot de passe (visible sous forme chiffrée dans la colonne Mot de passe), et ce mot de passe n'a pas expiré (indiqué par le N dans la colonne password_expired)
  • N'a pas de limites de ressources définies (indiquées par les 0 dans les colonnes max_*)
  • N'a aucun paramètre SSL ou x509 (indiqué par les valeurs vides dans les colonnes ssl_* et x509_*)
  • Utilise le plug-in mysql_native_password pour s'authentifier (le nom du plug-in est répertorié dans la colonne du plug-in.)
*************************** 1. row ***************************
                  Host: localhost
                  User: testuser
              Password: *14E65567ABDB5135D0CFD9A70B3032C179A49EE7
           Select_priv: Y
           Insert_priv: N
...
          Trigger_priv: N
Create_tablespace_priv: N
              ssl_type:
            ssl_cipher:
           x509_issuer:
          x509_subject:
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
 authentication_string:
      password_expired: N

Authentification native

Lorsque vous vous connectez à un serveur MySQL à l'aide du plug-in d'authentification par mot de passe natif (le mécanisme d'authentification par défaut), il correspond au nom d'utilisateur que vous avez spécifié, à l'hôte à partir duquel vous vous connectez et à votre mot de passe par rapport aux lignes de la table mysql.user pour déterminer si vous pouvez vous connecter et effectuer des actions.

Pour vous connecter au serveur local à l'aide du client mysql, indiquez le nom d'utilisateur et le mot de passe du compte que vous souhaitez utiliser :

shell> mysql -u[username] -p[password]
Remarque que le nom d'hôte associé à votre utilisateur dans la table mysql.user fait référence au nom de l'hôte à partir duquel vous vous connectez, et non à l'hôte du serveur.

Pour vous connecter à un serveur qui n'est pas installé sur l'hôte local de votre client, indiquez le nom d'hôte du serveur auquel vous vous connectez :

shell> mysql -u[username] -p[password] -h[server_host]

Création d'un compte utilisateur

Un nom de compte se compose d'un nom d'utilisateur et du nom de l'hôte client à partir duquel l'utilisateur doit se connecter au serveur. Les noms de compte ont le format ‘user_name’@’host_name ‘. Les noms d'utilisateur peuvent comporter jusqu'à 16 caractères. Vous devez utiliser des guillemets simples autour des noms d'utilisateur et des noms d'hôte s'ils contiennent des caractères spéciaux, tels que des tirets. Si une valeur est valide en tant qu'identifiant sans guillemets, les guillemets sont facultatifs. Cependant, vous pouvez toujours utiliser des guillemets.

Par exemple, utilisez l'instruction CREATE USER…IDENTIFIED BY pour créer un compte :
– Pour un utilisateur nommé jim
– Pour se connecter depuis localhost
– En utilisant le mot de passe Abc123

CREATE USER 'jim'@'localhost' IDENTIFIED BY 'Abc123';

Évitez les éventuels risques de sécurité lors de la création de comptes :

  • Ne créez pas de comptes sans mot de passe.
  • Ne créez pas de comptes anonymes.
  • Dans la mesure du possible, évitez les caractères génériques lorsque vous spécifiez des noms d'hôte de compte.

Modèles de nom d'hôte

Utilisez un modèle d'hôte contenant le % ou _ caractères génériques pour configurer un compte qui permet à l'utilisateur de se connecter à partir de n'importe quel hôte dans un domaine ou un sous-réseau entier. Si vous omettez la partie hôte d'un nom de compte lors de la rédaction d'une déclaration de gestion de compte, MySQL suppose un nom d'hôte de %.

Une valeur d'hôte de %.example.com correspond à n'importe quel hôte du domaine example.com. Une valeur d'hôte de 192.168.% correspond à n'importe quel hôte du sous-réseau 192.168. Une valeur d'hôte de % correspond à n'importe quel hôte, permettant à l'utilisateur de se connecter à partir de n'importe quel hôte. Utilisez une adresse IP avec un masque de sous-réseau pour permettre à l'utilisateur de se connecter à partir de n'importe quel hôte avec une adresse dans ce sous-réseau. Par exemple, une valeur de 10.0.0.0/255.255.255.0 correspond à n'importe quel hôte avec 10.0.0 dans les 24 premiers bits de son adresse IP.

Évitez d'utiliser des caractères génériques dans les noms d'hôte, sauf lorsque cela est strictement nécessaire et correctement audité pour éviter les abus ou une exposition accidentelle. Exécutez des vérifications périodiques comme suit :

mysql> SELECT User, Host FROM mysql.user WHERE Host LIKE '%\%%';

Exemples de nom d'utilisateur et de nom d'hôte :

  • [email protected]
  • john@'10.20.30.%'
  • jean@'%.notredomaine.com'
  • jean@’10.20.30.0/255.255.255.0′

Pour spécifier un compte d'utilisateur anonyme (c'est-à-dire un compte qui correspond à n'importe quel nom d'utilisateur), spécifiez une chaîne vide pour la partie nom d'utilisateur du nom de compte :

mysql> CREATE USER ''@'localhost';

Évitez de créer des comptes anonymes, en particulier ceux qui n'ont pas de mot de passe (comme dans l'exemple ci-dessus). Cela permet d'éviter les risques de sécurité qui découleraient de l'ouverture de l'accès à l'installation de MySQL. Si un hôte correspond à deux modèles ou plus, MySQL choisit le modèle le plus spécifique.

Définir le mot de passe du compte

Le moyen le plus courant de modifier le mot de passe d'un compte existant sans modifier aucun de ses privilèges consiste à utiliser le SET PASSWORD déclaration. Par exemple, pour définir le mot de passe de jim sur l'hôte local sur NewPass, utilisez l'instruction suivante :

mysql> SET PASSWORD FOR jim@localhost = PASSWORD('NewPass');

Si vous êtes connecté en tant qu'utilisateur non root et que votre utilisateur ne dispose pas du privilège UPDATE pour la base de données mysql, vous ne pouvez modifier que votre propre mot de passe. Pour ce faire, utilisez l'instruction SET PASSWORD sans la clause FOR :

mysql> SET PASSWORD = PASSWORD('NewPass');

Lorsque vous utilisez SET PASSWORD, utilisez le PASSWORD() fonction pour crypter le mot de passe. Notez que l'instruction CREATE USER crypte automatiquement le mot de passe que vous fournissez, vous n'avez donc pas besoin d'utiliser la fonction PASSWORD() lors de la création d'un utilisateur avec CREATE USER.

Utilisez les commandes mysqladmin suivantes pour définir les mots de passe depuis le shell :

shell> mysqladmin -u root password 'rootpass'
shell> mysqladmin -u root -h host_name password 'rootpass'

Dans les exemples précédents, "rootpass" représente le mot de passe root et "host_name" est le nom de l'hôte à partir duquel le compte root accède au serveur MySQL.

Confirmation des mots de passe

Attribuez des mots de passe forts et uniques à tous les comptes d'utilisateurs. Évitez les mots de passe faciles à deviner. Utilisez l'instruction SELECT suivante pour répertorier tous les comptes
sans mot de passe :

SELECT Host, User FROM mysql.user WHERE Password = '';

Pour identifier les mots de passe en double :

SELECT User FROM mysql.user GROUP BY password HAVING count(user)>1;

Pour faire expirer le mot de passe d'un utilisateur, utilisez la requête ci-dessous :

ALTER USER jim@localhost PASSWORD EXPIRE;

Pour émettre les instructions SELECT dans les exemples ci-dessus, vous devez vous connecter avec un compte utilisateur avec des privilèges SELECT sur le schéma mysql ou la table mysql.user. Vous pouvez avoir plusieurs comptes qui s'appliquent à un nom d'utilisateur spécifique. Par exemple, si l'utilisateur jim se connecte à partir de deux emplacements et que vous configurez des comptes pour chaque emplacement, tels que jim@localhost et jim@'192.168.14.38′, les deux comptes identifiés comme jim peuvent avoir le même mot de passe.

Vous pouvez faire expirer le mot de passe d'un utilisateur avec l'instruction ALTER USER…PASSWORD EXPIRE. Si votre mot de passe expire, vous devez le modifier à l'aide d'une instruction SET PASSWORD lors de votre prochaine connexion. Toutes les instructions que vous exécutez et qui ne commencent pas par SET renvoient une erreur jusqu'à ce que vous changiez votre mot de passe, comme dans cet exemple :

mysql> SELECT * FROM City WHERE 1=2;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
mysql> SET PASSWORD = PASSWORD('new_pwd'); 
Query OK, 0 rows affected (0.01 sec) 

mysql> SELECT * FROM City WHERE 1=2;
Empty set (0.00 sec)

Manipulation des comptes d'utilisateurs

Utilisez le RENOMMER L'UTILISATEUR instruction pour renommer un compte utilisateur :

RENAME USER 'jim'@'localhost' TO 'james'@'localhost';

La requête ci-dessus modifie le nom de compte d'un compte existant ou modifie le nom d'utilisateur ou le nom d'hôte du nom de compte, ou les deux.

Utilisez l'instruction DROP USER pour supprimer un compte utilisateur :

DROP USER 'jim'@'localhost';

La requête ci-dessus révoque tous les privilèges d'un compte existant, puis supprime le compte. Il supprime également tous les enregistrements du compte de toute table de subvention dans laquelle ils existent.

Comprendre l'authentification enfichable MySQL
Comprendre les privilèges MySQL


Linux
  1. Gestion de base des utilisateurs Linux

  2. Bases de l'utilisateur et de la base de données MySQL

  3. Guide du débutant sur la gestion des logiciels Linux avec RPM

  4. CentOS / RHEL :Guide du débutant sur cron

  5. Quel est le but de l'utilisateur "mysql.sys@localhost"

Guide des événements MySQL et du planificateur d'événements

Un guide pour débutants sur LVM

Un guide du débutant sur les tâches Cron

Un guide pour débutants sur la gestion des utilisateurs sur Ubuntu Desktop et Server

Guide complet d'administration des utilisateurs sous Linux

Le guide complet pour installer MySQL sur Ubuntu