web-dev-qa-db-fra.com

Qu'est-ce que mysql_native_password?

J'essayais de définir le mot de passe pour root. Quand je cours:

mysql> SELECT * from mysql.user where User="root";

Ça montre:

+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+
| Host      | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin                | authentication_string | password_expired | password_last_changed | password_lifetime | account_locked |
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+
| localhost | root | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      |          |            |             |              |             0 |           0 |               0 |                    0 | mysql_native_password |                       | N                | 2018-06-13 15:11:59   |              NULL | N              |
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+

Ce Document dit que,

Le plugin d'authentification native mysql_native_password est rétrocompatible. Les clients plus anciens qui ne prennent pas en charge les plug-ins d'authentification utilisent le protocole d'authentification natif, afin qu'ils puissent se connecter à des serveurs qui prennent en charge l'authentification enfichable.

Mais techniquement, je ne reçois pas grand-chose. Doit-il faire quoi que ce soit avec root mot de passe utilisateur?

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>';

et

ALTER USER 'root'@'localhost' IDENTIFIED BY '<password>';

Cela fait-il une différence?

9
d a i s y

Pendant longtemps, MySQL a pris en charge différents plugins d'authentification , essentiellement des morceaux de code programmables pour démontrer qu'un compte mysql est utilisé par n'importe qui le prétend.

La façon originale de le faire est de configurer un mot de passe, de le hacher d'une manière particulière et de le stocker sur la table mysql.user. Cependant, ce n'est pas la seule façon de vous authentifier, par exemple:

  • L'authentification de socket Unix permet la connexion à des utilisations sur la machine locale avec le même nom Unix que le compte mysql. Cela est couramment utilisé pour les comptes d'administrateur pour des choses comme la surveillance ou d'autres tâches sans avoir besoin de conserver un mot de passe. Il a ce nom car il ne fonctionne qu'avec des connexions de socket (pas à distance)
  • Un plugin d'authentification PAM permet de configurer, par exemple, un système soutenu par LDAP et de l'utiliser pour s'authentifier (agréable de l'intégrer dans une organisation existante)
  • Les dernières versions de mysql (8.0) utilisent une méthode d'authentification moins triviale (caching_sha2_password), qui en théorie est plus sûr (je ne dis pas que c'est le cas ou pas, mais certainement le "natif" par défaut était assez mauvais), mais peut nécessiter des mises à jour des pilotes et des applications client, de sorte que vous pouvez toujours revenir en arrière à l'ancien pour des raisons de compatibilité.

Dans le monde "Entreprise", il existe souvent des besoins particuliers pour des méthodes d'authentification très spéciales, au-delà d'un utilisateur et d'un mot de passe.

Fondamentalement, mysql_native_password est la méthode traditionnelle d'authentification - ce n'est pas très sécurisé (il utilise juste un hachage du mot de passe), mais il est compatible avec les anciens pilotes . Si vous allez démarrer un nouveau service mysql, vous voudrez probablement utiliser le nouveau plugin dès le début (et TLS). Si vous avez des besoins spéciaux, vous pouvez utiliser une autre méthode - vous pouvez même en programmer une si vous avez certains besoins spéciaux).

Vous pouvez choisir une méthode différente pour chaque utilisateur individuel - par exemple, vos applications normales peuvent utiliser mysql_native_password ou la nouvelle sha2, mais vous pouvez vous assurer que votre les comptes d'administrateur utilisent un jeton d'authentification à 2 facteurs et unix_socket pour un utilisateur de surveillance qui collecte des statistiques sur le serveur mysql. Ces autres méthodes d'authentification peuvent ou non utiliser le champ de mot de passe sur la table mysql.user, comme la méthode native (elles peuvent stocker le mot de passe ailleurs, ou elles peuvent même ne pas avoir un concept de mot de passe!).

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>';

et

ALTER USER 'root'@'localhost' IDENTIFIED BY '<password>';

Sont essentiellement les mêmes, mysql_native_password est normalement la méthode d'authentification par défaut. Avec WITH, vous pouvez décider de la méthode à utiliser. Par exemple, si vous utilisez GRANT USAGE ON *.* TO root@localhost IDENTIFIED WITH socket_auth, vous définissez cet utilisateur pour qu'il utilise l'authentification de socket unix. MariaDB utilise une syntaxe légèrement différente: VIA unix_socket. L'exécution de ces commandes entraîne principalement une mise à jour de la table mysql.user.

Remarque ALTER/GRANT fonctionne automatiquement lors de la prochaine connexion utilisateur, tandis que UPDATEing directement la table mysql.user peut nécessiter un FLUSH PRIVILEGES, et a quelques problèmes avec certains scénarios (Galera, etc.).

15
jynus