
Es wird gesagt, dass das beste Passwort das ist, das man sich nicht merken muss. Im Fall von MySQL ist das dank des Plugins tatsächlich möglich. und seiner Version für MariaDB — .
Beide Plugins sind alles andere als neu, sie wurden bereits in diesem Blog behandelt, beispielsweise in dem Artikel darüber, Als ich jedoch untersucht habe, was es Neues in MariaDB 10.4 gibt, stellte ich fest, dass unix_socket jetzt standardmäßig eingestellt ist und eine der Authentifizierungsmethoden darstellt ("eine der", da in MariaDB 10.4 einem Benutzer mehrere Plugins für die Authentifizierung zur Verfügung stehen, was im Dokument ).
Wie ich bereits sagte, sind das keine Neuigkeiten, und wenn man MySQL mit den von der Debian-Community unterstützten .deb-Paketen installiert, wird ein Benutzer mit Root-Rechten für die Authentifizierung über den Socket angelegt. Das 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>>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 ein eingetragenes Warenzeichen von Oracle Corporation und/oder dessen Tochtergesellschaften. 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 Eingabeanweisung 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 Menge (0.01 Sekunde)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;
+------------------------------------------------------------------------------------------------+
| Grants for 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 Menge (0.00 Sekunde)Die .deb-Pakete aus dem offiziellen Percona-Repository konfigurieren ebenfalls die Authentifizierung des Benutzers mit Root-Rechten über auth-socket und für Percona Server. Ein Beispiel dazu ist und Ubuntu 16.04:
root@app:~# whoami
root
root@app:~# mysql
Willkommen beim MySQL-Monitor. Befehle 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 Tochtergesellschaften
Copyright (c) 2000, 2019, Oracle und/oder deren Tochtergesellschaften. Alle Rechte vorbehalten.
Oracle ist eine eingetragene Marke der Oracle Corporation und/oder ihrer
tochtergesellschaften. Andere Namen können Marken ihrer jeweiligen
Eigentümer sein.
Tippen Sie 'help;' oder 'h' für Hilfe. Tippen Sie 'c', 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 im Set (0.00 Sek)Was ist also die Magie? Das Plugin überprüft, ob der Linux-Nutzer mit dem MySQL-Nutzer übereinstimmt, indem es die Socket-Option SO_PEERCRED verwendet, um Informationen über den Benutzer zu sammeln, der das Clientprogramm ausführt. Daher kann das Plugin nur auf Systemen verwendet werden, die die Option SO_PEERCRED unterstützen, wie im Fall von Linux. Die Socket-Option SO_PEERCRED ermöglicht es, die UID des mit dem Socket verbundenen Prozesses zu ermitteln. Und anschließend erhält man den Benutzernamen, der mit dieser UID verknüpft ist.
Ein Beispiel mit dem Benutzer „vagrant“:
vagrant@mysql1:~$ whoami
vagrant
vagrant@mysql1:~$ mysql
FEHLER 1698 (28000): Zugriff 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 beim 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.
Tippen Sie 'help;' oder 'h' für Hilfe. Tippen Sie 'c', um die aktuelle Eingabe zu löschen.
MariaDB [(none)]> show grants;
+---------------------------------------------------------------------------------+
| Grants for vagrant@localhost |
+---------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket |
+---------------------------------------------------------------------------------+
1 Zeile im Set (0.00 Sek)Es hat geklappt!
Was ist mit einer Nicht-Debian-Distribution, wo das standardmäßig nicht vorgesehen ist? Lassen Sie uns versuchen, den Percona Server für MySQL 8 auf CentOS 7 zu verwenden:
mysql> show variables like '%version%comment';
+-----------------+---------------------------------------------------+
| Variable_name | Value |
+-----------------+---------------------------------------------------+
| version_comment | Percona Server (GPL), Release 7, Revision 613e312 |
+-----------------+---------------------------------------------------+
1 Zeile im Set (0.01 Sek)
mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
FEHLER 1524 (HY000): Plugin 'auth_socket' ist nicht geladenFehler. Was hat gefehlt? Plugin wurde nicht geladen:
mysql> pager grep socket
PAGER auf 'grep socket' gesetzt
mysql> show plugins;
47 Zeilen im Ergebnis (0.00 Sek.)Fügen wir das Plugin zum Prozess hinzu:
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 im Ergebnis (0.00 Sek.)Jetzt haben wir alles Notwendige. Lassen Sie es uns noch einmal versuchen:
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 können Sie sich mit dem Benutzernamen „percona“ anmelden.
[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 dessen Tochtergesellschaften
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' ein, um Hilfe zu erhalten. Geben Sie 'c' ein, um die aktuelle Eingabeanweisung 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 Ergebnis (0.00 Sek.)Und es hat wieder funktioniert!
Frage: Wird es möglich sein, sich mit demselben Benutzernamen percona, aber von einem anderen Benutzer aus anzumelden?
[percona@ip-192-168-1-111 ~]$ logout
[root@ip-192-168-1-111 ~]# mysql -upercona
FEHLER 1698 (28000): Zugriff verweigert für den Benutzer 'percona'@'localhost'Nein, das wird nicht möglich sein.
Ausgabe
MySQL ist in mehreren Aspekten flexibel, einer davon ist das Authentifizierungsverfahren. Wie aus diesem Beitrag ersichtlich ist, kann der Zugriff ohne Passwörter auf Basis der Betriebssystembenutzer erfolgen. Dies kann in bestimmten Szenarien nützlich sein, einer davon ist, wenn Sie von RDS/Aurora auf eine reguläre MySQL migrieren, indem Sie , um weiterhin Zugriff zu erhalten, jedoch ohne Passwörter.
Quelle: habr.com
