So verwenden Sie MySQL ohne Passwort (und Sicherheitsrisiken).

So verwenden Sie MySQL ohne Passwort (und Sicherheitsrisiken).

Es wird gesagt, dass das beste Passwort das ist, das man sich nicht merken muss. Bei MySQL ist das dank des Plugins tatsächlich möglich. auth_socket und seiner Version für MariaDB — unix_socket.

Diese beiden Plugins sind keineswegs neu, sie wurden bereits in diesem Blog ausführlich behandelt, beispielsweise in einem Artikel darüber, wie man Passwörter in MySQL 5.7 mit dem auth_socket-Plugin ändert.Allerdings habe ich bei der Untersuchung der Neuheiten in MariaDB 10.4 festgestellt, dass unix_socket jetzt standardmäßig eingestellt ist und eine der Authentifizierungsmethoden darstellt („eine der“, weil in MariaDB 10.4 einem Benutzer für die Authentifizierung mehr als ein Plugin zur Verfügung steht, wie im Dokument „Authentifizierung“ von MariaDB 10.04).

Wie ich bereits sagte, sind dies keine Neuigkeiten, und wenn man MySQL mit den von der Debian-Community unterstützten .deb-Paketen installiert, wird der Benutzer mit Root-Rechten für die Authentifizierung über den Socket erstellt. Dies gilt sowohl für MySQL als auch für MariaDB.

root@app:~# apt-cache show mysql-server-5.7 | grep -i maintainers
Original-Maintainer: Debian MySQL Betreuer <pkg-mysql-maint@lists.alioth.debian.org>
Original-Maintainer: Debian MySQL Betreuer <<<a href="mailto:pkg-mysql-maint@lists.alioth.debian.org">pkg-mysql-maint@lists.alioth.debian.org</a></a>>

Mit den Debian-Paketen für MySQL wird der Root-Benutzer wie folgt authentifiziert:

root@app:~# whoami
root=
root@app:~# mysql
Willkommen beim MySQL-Monitor. Befehle enden mit ; oder g.
Ihre MySQL-Verbindungs-ID ist 4
Serverversion: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2019, Oracle und/oder dessen Tochtergesellschaften. Alle Rechte vorbehalten.
Oracle ist eine eingetragene Marke von Oracle Corporation und/oder deren Tochtergesellschaften. Andere Namen können Marken ihrer jeweiligen Eigentümer sein.

Geben Sie 'help;' oder 'h' für Hilfe ein. Geben Sie 'c' ein, um die aktuelle Eingabezeile zu löschen.

mysql> select user, host, plugin, authentication_string from mysql.user where user = 'root';
+------+-----------+-------------+-----------------------+
| user | host      | plugin | authentication_string |
+------+-----------+-------------+-----------------------+
| root | localhost | auth_socket |                       |
+------+-----------+-------------+-----------------------+
1 Zeile in der Menge (0,01 Sek.)

Das Gleiche gilt für das .deb-Paket für MariaDB:

10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

MariaDB [(none)]> show grants;
+------------------------------------------------------------------------------------------------+
| Berechtigungen für root@localhost                                                               |
+------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION                                  |
+------------------------------------------------------------------------------------------------+
2 Zeilen in der Menge (0,00 Sek.)

Die .deb-Pakete aus dem offiziellen Repository von Percona richten ebenfalls die Benutzerverbindung mit Root-Rechten unter auth-socket für Percona Server ein. Hier ein Beispiel mit Percona Server für MySQL 8.0.16-7 und Ubuntu 16.04:

root@app:~# whoami
root
root@app:~# mysql
Willkommen im MySQL-Monitor. Kommandos enden mit ; oder g.
Ihre MySQL-Verbindungs-ID ist 9
Serverversion: 8.0.16-7 Percona Server (GPL), Release '7', Revision '613e312'

Copyright (c) 2009-2019 Percona LLC und/oder deren Partner
Copyright (c) 2000, 2019, Oracle und/oder deren Partner. Alle Rechte vorbehalten.
Oracle ist eine eingetragene Marke von Oracle Corporation und/oder deren
Partnern. Weitere Namen können Marken ihrer jeweiligen
Eigentümer sein.

Geben Sie 'help;' oder 'h' für Hilfe ein. Geben Sie 'c' ein, um die aktuelle Eingabe zu löschen.

mysql> select user, host, plugin, authentication_string from mysql.user where user ='root';
+------+-----------+-------------+-----------------------+
| user | host      | plugin | authentication_string |
+------+-----------+-------------+-----------------------+
| root | localhost | auth_socket |                       |
+------+-----------+-------------+-----------------------+
1 Zeile in Set (0.00 Sek.)

Was ist also das Geheimnis? Das Plugin überprüft, ob der Linux-Benutzer mit dem MySQL-Benutzer übereinstimmt, indem es die Socket-Option SO_PEERCRED verwendet – um Informationen über den Benutzer zu sammeln, der das Client-Programm ausführt. Daher kann das Plugin nur auf Systemen verwendet werden, die die Option SO_PEERCRED unterstützen, wie beispielsweise Linux. Die Socket-Option SO_PEERCRED ermöglicht es, die UID des Prozesses zu ermitteln, der mit dem Socket verbunden ist. Anschließend wird der Benutzername abgerufen, der mit dieser UID verknüpft ist.

Hier ist ein Beispiel mit dem Benutzer „vagrant“:

vagrant@mysql1:~$ whoami
vagrant
vagrant@mysql1:~$ mysql
ERROR 1698 (28000): Zugang verweigert für Benutzer 'vagrant'@'localhost'

Da es in MySQL keinen Benutzer «vagrant» gibt, wurde der Zugriff verweigert. Lassen Sie uns diesen Benutzer erstellen und es erneut versuchen:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

vagrant@mysql1:~$ mysql
Willkommen im MariaDB-Monitor.  Befehle enden mit ; oder g.
Ihre MariaDB-Verbindungs-ID ist 45
Serverversion: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab und andere.
Geben Sie 'help;' oder 'h' für Hilfe ein. Geben Sie 'c' ein, um die aktuelle Eingabemeldung zu löschen.

MariaDB [(none)]> show grants;
+---------------------------------------------------------------------------------+
| Grants für vagrant@localhost                                                    |
+---------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket |
+---------------------------------------------------------------------------------+
1 Zeile im Set (0,00 Sek.)

Erledigt!

Und was ist mit einer nicht-Debian-Distribution, wo dies standardmäßig nicht vorgesehen ist? Lassen Sie uns Percona Server for MySQL 8 ausprobieren, installiert auf CentOS 7:

mysql> show variables like '%version%comment';
+-----------------+---------------------------------------------------+
| Variable_name   | Value                                   |
+-----------------+---------------------------------------------------+
| version_comment | Percona Server (GPL), Release 7, Revision 613e312 |
+-----------------+---------------------------------------------------+
1 Zeile in Menge (0.01 sek)

mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
FEHLER 1524 (HY000): Plugin 'auth_socket' ist nicht geladen

Ein Fehler. Was hat gefehlt? Das Plugin ist nicht geladen:

mysql> pager grep socket
PAGER auf 'grep socket' gesetzt
mysql> show plugins;
47 Zeilen in Menge (0.00 sek)

Fügen wir das Plugin in den Prozess ein:

mysql> nopager
PAGER auf stdout gesetzt
mysql> INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
Abfrage OK, 0 Zeilen betroffen (0.00 sek)

mysql> pager grep socket; show plugins;
PAGER auf 'grep socket' gesetzt
| auth_socket                     | AKTIV | AUTHENTIFIZIERUNG | auth_socket.so | GPL     |
48 Zeilen in Menge (0.00 sek)

Jetzt haben wir alles, was wir brauchen. Versuchen wir es noch einmal:

mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
Abfrage OK, 0 Zeilen betroffen (0.01 sek)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'percona'@'localhost';
Abfrage OK, 0 Zeilen betroffen (0.01 sek)

Jetzt kann man sich mit dem Benutzer 'percona' einloggen.

[percona@ip-192-168-1-111 ~]$ whoami
percona
[percona@ip-192-168-1-111 ~]$ mysql -upercona
Willkommen beim MySQL-Monitor. Befehle enden mit ; oder g.
Ihre MySQL-Verbindungs-ID ist 19
Serverversion: 8.0.16-7 Percona Server (GPL), Release 7, Revision 613e312

Copyright (c) 2009-2019 Percona LLC und/oder Tochtergesellschaften
Copyright (c) 2000, 2019, Oracle und/oder Tochtergesellschaften. Alle Rechte vorbehalten.

Oracle ist ein eingetragenes Warenzeichen von Oracle Corporation und/oder ihren
affiliates. Andere Namen können Warenzeichen ihrer jeweiligen
Eigentümer sein.

Geben Sie 'help;' oder 'h' für Hilfe ein. Geben Sie 'c' ein, um die aktuelle Eingabebefehlszeile zu löschen.

mysql> select user, host, plugin, authentication_string from mysql.user where user ='percona';
+---------+-----------+-------------+-----------------------+
| user    | host   | plugin   | authentication_string |
+---------+-----------+-------------+-----------------------+
| percona | localhost | auth_socket |                       |
+---------+-----------+-------------+-----------------------+
1 Zeile im Set (0.00 sec)

Und wieder hat es geklappt!

Frage: Kann ich mich mit dem gleichen Login percona, aber von einem anderen Benutzer aus anmelden?

[percona@ip-192-168-1-111 ~]$ logout
[root@ip-192-168-1-111 ~]# mysql -upercona
FEHLER 1698 (28000): Zugriff verweigert für Benutzer 'percona'@'localhost'

Nein, das wird nicht funktionieren.

Fazit

MySQL ist in mehreren Aspekten recht flexibel, einer davon ist das Authentifizierungssystem. Wie aus diesem Beitrag hervorgeht, kann der Zugriff ohne Passwörter auf Grundlage der Betriebssystembenutzer erfolgen. Dies kann in bestimmten Szenarien nützlich sein, insbesondere wenn man von RDS/Aurora auf reguläres MySQL migriert. IAM-Datenbankauthentifizierung, um weiterhin Zugang zu erhalten, jedoch ohne Passwörter.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster