
Det sägs att det bästa lösenordet är ett som man inte behöver komma ihåg. När det gäller MySQL är detta möjligt tack vare pluginet och dess version för MariaDB — .
Båda dessa plugin är inte nya, de har diskuterats mycket i denna blogg, till exempel i artikeln om hur man ändrar lösenord i MySQL 5.7 med hjälp av auth_socket-pluginet. "Autentisering" från MariaDB 10.04. ).
Med Debian-paket för MySQL autentiseras root-användaren på följande sätt:
root@app:~# apt-cache show mysql-server-5.7 | grep -i maintainers
Original-Maintainer: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
Original-Maintainer: Debian MySQL Maintainers <<a href="mailto:pkg-mysql-maint@lists.alioth.debian.org">pkg-mysql-maint@lists.alioth.debian.org</a>>root@app:~# whoami root= root@app:~# mysql Välkommen till MySQL-monitoren. Kommandon avslutas med ; eller g. Din MySQL-anslutnings-ID är 4 Serverversion: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)Copyright (c) 2000, 2019, Oracle och/eller dess dotterbolag. Alla rättigheter förbehållna. Oracle är ett registrerat varumärke för Oracle Corporation och/eller dess dotterbolag. Andra namn kan vara varumärken för sina respektive ägare.Skriv 'help;' eller 'h' för hjälp. Skriv 'c' för att rensa nuvarande inmatningskommando.mysql> select user, host, plugin, authentication_string from mysql.user where user = 'root'; +------+-----------+-------------+-----------------------+ | user | host | plugin | authentication_string | +------+-----------+-------------+-----------------------+ | root | localhost | auth_socket | | +------+-----------+-------------+-----------------------+ 1 rad i resultatet (0.01 sek)
Detsamma gäller för .deb-paketet för MariaDB:10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04MariaDB [(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 rader i resultatet (0.00 sek)
.deb-paketen från det officiella Percona-repoet konfigurerar också autentisering av root-användaren med auth-socket för Percona Server. Låt oss ge ett exempel medPercona Server for MySQL 8.0.16-7 и Ubuntu 16.04:
root@app:~# whoami
root
root@app:~# mysql
Välkommen till MySQL-monitoren. Kommandon avslutas med ; eller g.
Din MySQL-anslutnings-ID är 9
Serverversion: 8.0.16-7 Percona Server (GPL), Release '7', Revision '613e312'
Copyright (c) 2009-2019 Percona LLC och/eller dess dotterbolag
Copyright (c) 2000, 2019, Oracle och/eller dess dotterbolag. Alla rättigheter förbehålls.
Oracle är ett registrerat varumärke tillhörande Oracle Corporation och/eller dess
dotterbolag. Andra namn kan vara varumärken tillhörande respektive
ägare.
Skriv 'help;' eller 'h' för hjälp. Skriv 'c' för att rensa den aktuella inmatningsfrågan.
mysql> select user, host, plugin, authentication_string from mysql.user where user ='root';
+------+-----------+-------------+-----------------------+
| user | host | plugin | authentication_string |
+------+-----------+-------------+-----------------------+
| root | localhost | auth_socket | |
+------+-----------+-------------+-----------------------+
1 rad i set (0.00 sek)Så vad är magin? Plugin kontrollerar att Linux-användaren motsvarar MySQL-användaren genom att använda socket-alternativet SO_PEERCRED – för att samla information om användaren som kör klientprogrammet. Därför kan plugin endast användas på system som stöder alternativet SO_PEERCRED, som till exempel Linux. Socket-alternativet SO_PEERCRED gör det möjligt att ta reda på uid kopplat till socketprocessen. Och sedan får det namnet för användaren kopplad till detta uid.
Låt oss ge ett exempel med användaren "vagrant":
vagrant@mysql1:~$ whoami
vagrant
vagrant@mysql1:~$ mysql
ERROR 1698 (28000): Åtkomst nekad för användaren 'vagrant'@'localhost'Eftersom det inte finns någon användare "vagrant" i MySQL, nekas vi åtkomst. Låt oss skapa denna användare och försöka igen:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket;
Frågan OK, 0 rader påverkade (0.00 sek)
vagrant@mysql1:~$ mysql
Välkommen till MariaDB-monitoren. Kommandon avslutas med ; eller g.
Din MariaDB-anslutnings-ID är 45
Serverversion: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab och andra.
Skriv 'help;' eller 'h' för hjälp. Skriv 'c' för att rensa den aktuella inmatningsfrågan.
MariaDB [(none)]> show grants;
+---------------------------------------------------------------------------------+
| Grants for vagrant@localhost |
+---------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket |
+---------------------------------------------------------------------------------+
1 rad i set (0.00 sek)Det fungerade!
Nåväl, hur är det med en icke-Debian-distribution där detta inte är förutbestämt som standard? Låt oss prova Percona Server för MySQL 8, installerad på CentOS 7:
mysql> show variables like '%version%comment';
+-----------------+---------------------------------------------------+
| Variable_name | Value |
+-----------------+---------------------------------------------------+
| version_comment | Percona Server (GPL), Release 7, Revision 613e312 |
+-----------------+---------------------------------------------------+
1 rad i set (0.01 sek)
mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
ERROR 1524 (HY000): Plugin 'auth_socket' är inte inlästNågot gick fel. Vad saknades? Tillägget laddades inte:
mysql> pager grep socket
PAGER inställd på 'grep socket'
mysql> show plugins;
47 rader i uppsättningen (0.00 sek)Vi lägger till ett tillägg i processen:
mysql> nopager
PAGER inställd på stdout
mysql> INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
Fråga OK, 0 rader påverkade (0.00 sek)
mysql> pager grep socket; show plugins;
PAGER inställd på 'grep socket'
| auth_socket | AKTIV | AUTENTISERING | auth_socket.so | GPL |
48 rader i uppsättningen (0.00 sek)Nu har vi allt som behövs. Låt oss prova igen:
mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
Fråga OK, 0 rader påverkade (0.01 sek)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'percona'@'localhost';
Fråga OK, 0 rader påverkade (0.01 sek)Nu kan du logga in med användarnamnet „percona”.
[percona@ip-192-168-1-111 ~]$ whoami
percona
[percona@ip-192-168-1-111 ~]$ mysql -upercona
Välkommen till MySQL-övervakaren. Kommandon avslutas med ; eller g.
Ditt MySQL-anslutnings-ID är 19
Serverversion: 8.0.16-7 Percona Server (GPL), Release 7, Revision 613e312
Upphovsrätt (c) 2009-2019 Percona LLC och/eller dess dotterbolag
Upphovsrätt (c) 2000, 2019, Oracle och/eller dess dotterbolag. Alla rättigheter förbehållna.
Oracle är ett registrerat varumärke av Oracle Corporation och/eller dess
dotterbolag. Andra namn kan vara varumärken för sina respektive
ägare.
Skriv 'help;' eller 'h' för hjälp. Skriv 'c' för att rensa den aktuella inmatningsfrasen.
mysql> select user, host, plugin, authentication_string from mysql.user where user ='percona';
+---------+-----------+-------------+-----------------------+
| user | host | plugin | authentication_string |
+---------+-----------+-------------+-----------------------+
| percona | localhost | auth_socket | |
+---------+-----------+-------------+-----------------------+
1 rad i uppsättningen (0.00 sek)Och vi lyckades igen!
Fråga: Kommer det att gå att logga in med samma användarnamn percona men från en annan användare?
[percona@ip-192-168-1-111 ~]$ logout
[root@ip-192-168-1-111 ~]# mysql -upercona
ERROR 1698 (28000): Åtkomst nekad för användare 'percona'@'localhost'Nej, det kommer inte att gå.
Utdata
MySQL är ganska flexibelt på flera sätt, en av dem är autentiseringsmetoden. Som man kan se i detta inlägg kan man få åtkomst utan lösenord, baserat på OS-användare. Detta kan vara användbart i vissa scenarier, och en av dem är när man migrerar från RDS/Aurora till vanlig MySQL, genom att använda , för att fortfarande få åtkomst, men utan lösenord.
Källa: habr.com
