it-swarm.com.de

Was ist mysql_native_password?

Ich habe versucht, ein Passwort für root festzulegen. Wenn ich renne:

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

Es zeigt:

+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+
| 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              |
+-----------+------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------+-------------+--------------+---------------+-------------+-----------------+----------------------+-----------------------+-----------------------+------------------+-----------------------+-------------------+----------------+

Dieses Dokument sagt das,

Das native Authentifizierungs-Plugin mysql_native_password ist abwärtskompatibel. Ältere Clients, die keine Authentifizierungs-Plugins unterstützen, verwenden das native Authentifizierungsprotokoll, sodass sie eine Verbindung zu Servern herstellen können, die eine steckbare Authentifizierung unterstützen.

Aber technisch bekomme ich nicht viel. Hat es etwas mit dem Benutzerkennwort root zu tun?

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

und

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

Macht es einen Unterschied?

9
d a i s y

MySQL unterstützt seit langem verschiedene Authentifizierungs-Plugins , im Grunde programmierbare Codeteile, um zu demonstrieren, dass ein MySQL-Konto von jedem behauptet wird, der dies behauptet.

Der ursprüngliche Weg, dies zu tun, besteht darin, ein Passwort einzurichten, es auf eine bestimmte Weise zu hashen und es in der Tabelle mysql.user zu speichern. Dies ist jedoch nicht die einzige Möglichkeit, sich zu authentifizieren, zum Beispiel:

  • Die Unix-Socket-Authentifizierung ermöglicht die Verwendung der Anmeldung auf dem lokalen Computer mit demselben Unix-Namen wie das MySQL-Konto. Dies wird häufig für Administratorkonten für Überwachungsaufgaben oder andere Aufgaben verwendet, ohne dass ein Kennwort verwaltet werden muss. Es hat diesen Namen, weil es nur mit Socket-Verbindungen funktioniert (nicht remote)
  • Mit einem PAM-Authentifizierungs-Plugin können Sie beispielsweise ein LDAP-gestütztes System einrichten und dieses zur Authentifizierung verwenden (schön, es in eine vorhandene Organisation zu integrieren).
  • Die neuesten Versionen von MySQL (8.0) verwenden eine weniger triviale Authentifizierungsmethode (caching_sha2_password), Die theoretisch sicherer ist (ich sage nicht, dass dies der Fall ist oder nicht, aber sicherlich die Standardmethode "native") ziemlich schlecht), erfordert jedoch möglicherweise Aktualisierungen der Client-Treiber und -Anwendungen, sodass Sie aus Kompatibilitätsgründen immer auf die ältere zurückgreifen können.

In der "Enterprise" -Welt gibt es häufig spezielle Anforderungen an ganz spezielle Authentifizierungsmethoden, die über einen Benutzer und ein Kennwort hinausgehen.

Grundsätzlich ist mysql_native_password die traditionelle Methode zur Authentifizierung - es ist nicht sehr sicher (es wird nur ein Hash des Passworts verwendet), aber es ist kompatibel mit älteren Treibern . Wenn Sie einen neuen MySQL-Dienst starten möchten, möchten Sie wahrscheinlich das neue Plugin von Anfang an (und TLS) verwenden. Wenn Sie spezielle Bedürfnisse haben, können Sie eine andere Methode verwenden - Sie können sogar eine programmieren, wenn Sie bestimmte spezielle Bedürfnisse haben).

Sie können für jeden einzelnen Benutzer eine andere Methode auswählen - Ihre normalen Anwendungen können beispielsweise mysql_native_password oder das neue sha2-Passwort verwenden, aber Sie können sicherstellen, dass Ihre Administratorkonten verwenden ein 2-Faktor-Authentifizierungstoken und unix_socket für einen Überwachungsbenutzer, der Statistiken auf dem MySQL-Server sammelt. Diese anderen Authentifizierungsmethoden verwenden möglicherweise das Kennwortfeld in der Tabelle mysql.user oder nicht, wie die native (sie speichern das Kennwort möglicherweise an anderer Stelle, oder sie haben möglicherweise nicht einmal ein Kennwortkonzept!).

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

und

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

Sind im Wesentlichen die gleichen, ist mysql_native_password normalerweise die Standardauthentifizierungsmethode. Mit WITH können Sie entscheiden, welche Methode verwendet werden soll. Wenn Sie beispielsweise GRANT USAGE ON *.* TO [email protected] IDENTIFIED WITH socket_auth Verwenden, stellen Sie diesen Benutzer so ein, dass er die Unix-Socket-Authentifizierung verwendet. MariaDB verwendet eine etwas andere Syntax: VIA unix_socket. Das Ausführen dieses Befehls führt hauptsächlich zu einer Aktualisierung der Tabelle mysql.user.

Hinweis ALTER/GRANT funktioniert automatisch bei der nächsten Benutzeranmeldung, während UPDATE für die direkte Eingabe der Tabelle mysql.user möglicherweise ein FLUSH PRIVILEGES Erforderlich ist und bestimmte Probleme auftreten Szenarien (Galera usw.).

15
jynus