
Ei spun că cea mai bună parolă este cea pe care nu trebuie să o amintiți. În cazul MySQL, acest lucru este posibil datorită pluginului și versiunea sa pentru MariaDB - .
Ambele plugin-uri nu sunt deloc noi s-au spus multe despre ele în același blog, de exemplu în articolul despre . Cu toate acestea, în timp ce mă uitam la ce este nou în MariaDB 10.4, am descoperit că unix_socket este acum instalat implicit și este una dintre metodele de autentificare („una dintre”, deoarece în MariaDB 10.4 mai mult de un plugin este disponibil pentru un utilizator pentru autentificare, ceea ce este explicat în document ).
Cum am spus, acestea nu sunt noutăți, iar când instalați MySQL folosind echipa suportată Debian Pentru pachetele .deb, se creează un utilizator root pentru autentificarea socket-ului. Acest lucru se aplică atât pentru MySQL, cât și pentru MariaDB.
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>>Cu genți Debian Pentru MySQL, utilizatorul root este autentificat după cum urmează:
root@app:~# whoami
root=
root@app:~# mysql
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 4
Server version: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql> select user, host, plugin, authentication_string from mysql.user where user = 'root';
+------+-----------+-------------+-----------------------+
| user | host | plugin | authentication_string |
+------+-----------+-------------+-----------------------+
| root | localhost | auth_socket | |
+------+-----------+-------------+-----------------------+
1 row in set (0.01 sec)La fel este și cazul pachetului .deb pentru 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 rows in set (0.00 sec)Pachetele .deb din depozitul oficial Percona configurează, de asemenea, autentificarea utilizatorului root sub auth-socket și pentru Percona Server. Să dăm un exemplu cu и Ubuntu 16.04:
root@app:~# whoami
root
root@app:~# mysql
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 9
Server version: 8.0.16-7 Percona Server (GPL), Release '7', Revision '613e312'
Copyright (c) 2009-2019 Percona LLC and/or its affiliates
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql> select user, host, plugin, authentication_string from mysql.user where user ='root';
+------+-----------+-------------+-----------------------+
| user | host | plugin | authentication_string |
+------+-----------+-------------+-----------------------+
| root | localhost | auth_socket | |
+------+-----------+-------------+-----------------------+
1 row in set (0.00 sec)Deci, care este magia? Pluginul verifică dacă utilizatorul Linux potrivește utilizatorul MySQL folosind opțiunea socket SO_PEERCRED pentru a colecta informații despre utilizatorul care rulează programul client. Prin urmare, pluginul poate fi utilizat numai pe sisteme care acceptă opțiunea SO_PEERCRED, cum ar fi LinuxOpțiunea de socket SO_PEERCRED vă permite să determinați UID-ul procesului asociat cu socket-ul. Procesul obține apoi numele de utilizator asociat cu acel UID.
Iată un exemplu cu utilizatorul „vagrant”:
vagrant@mysql1:~$ whoami
vagrant
vagrant@mysql1:~$ mysql
ERROR 1698 (28000): Access denied for user 'vagrant'@'localhost'Deoarece nu există niciun utilizator „vagabond” în MySQL, ni se interzice accesul. Să creăm un astfel de utilizator și să încercăm din nou:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket;
Query OK, 0 rows affected (0.00 sec)
vagrant@mysql1:~$ mysql
Welcome to the MariaDB monitor. Commands end with ; or g.
Your MariaDB connection id is 45
Server version: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
MariaDB [(none)]> show grants;
+---------------------------------------------------------------------------------+
| Grants for vagrant@localhost |
+---------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket |
+---------------------------------------------------------------------------------+
1 row in set (0.00 sec)S-a întâmplat!
Ei bine, ce zici de non-Debian distribuție unde acest lucru nu este furnizat în mod implicit? Să încercăm Percona Server pentru MySQL 8, instalat pe CentOS 7:
mysql> show variables like '%version%comment';
+-----------------+---------------------------------------------------+
| Variable_name | Value |
+-----------------+---------------------------------------------------+
| version_comment | Percona Server (GPL), Release 7, Revision 613e312 |
+-----------------+---------------------------------------------------+
1 row in set (0.01 sec)
mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
ERROR 1524 (HY000): Plugin 'auth_socket' is not loadedPăcat. Ce lipsea? Pluginul nu a fost încărcat:
mysql> pager grep socket
PAGER set to 'grep socket'
mysql> show plugins;
47 rows in set (0.00 sec)Să adăugăm un plugin la proces:
mysql> nopager
PAGER set to stdout
mysql> INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
Query OK, 0 rows affected (0.00 sec)
mysql> pager grep socket; show plugins;
PAGER set to 'grep socket'
| auth_socket | ACTIVE | AUTHENTICATION | auth_socket.so | GPL |
48 rows in set (0.00 sec)Acum avem tot ce ne trebuie. Hai sa incercam din nou:
mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'percona'@'localhost';
Query OK, 0 rows affected (0.01 sec)Acum vă puteți autentifica folosind numele de utilizator „percona”.
[percona@ip-192-168-1-111 ~]$ whoami
percona
[percona@ip-192-168-1-111 ~]$ mysql -upercona
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 19
Server version: 8.0.16-7 Percona Server (GPL), Release 7, Revision 613e312
Copyright (c) 2009-2019 Percona LLC and/or its affiliates
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
mysql> select user, host, plugin, authentication_string from mysql.user where user ='percona';
+---------+-----------+-------------+-----------------------+
| user | host | plugin | authentication_string |
+---------+-----------+-------------+-----------------------+
| percona | localhost | auth_socket | |
+---------+-----------+-------------+-----------------------+
1 row in set (0.00 sec)Și a funcționat din nou!
Întrebare: va fi posibil să vă autentificați în sistem cu aceeași autentificare percona, dar ca alt utilizator?
[percona@ip-192-168-1-111 ~]$ logout
[root@ip-192-168-1-111 ~]# mysql -upercona
ERROR 1698 (28000): Access denied for user 'percona'@'localhost'Nu, nu va funcționa.
Producție
MySQL este destul de flexibil din mai multe aspecte, dintre care unul este metoda de autentificare. După cum puteți vedea din această postare, accesul poate fi obținut fără parole, pe baza utilizatorilor sistemului de operare. Acest lucru poate fi util în anumite scenarii, iar unul dintre ele este atunci când migrați de la RDS/Aurora la MySQL obișnuit folosind pentru a obține în continuare acces, dar fără parole.
Sursa: www.habr.com
