
Er wordt gezegd dat het beste wachtwoord datgene is dat je niet hoeft te onthouden. In het geval van MySQL is dit mogelijk dankzij de plugin en de versie voor MariaDB ā .
Beide plugins zijn helemaal niet nieuw, er is al veel over gesproken in deze blog, bijvoorbeeld in het artikel over Echter, terwijl ik keek naar wat nieuw is in MariaDB 10.4, ontdekte ik dat unix_socket nu standaard wordt ingesteld en een van de authenticatiemethoden is (āeen van deā, omdat in MariaDB 10.4 een gebruiker voor authenticatie meer dan ƩƩn plugin kan hebben, wat in het document wordt uitgelegd ).
Zoals ik al zei, zijn dit geen nieuwtjes, en wanneer je MySQL installeert met de officieel ondersteunde .deb-pakketten van het Debian-team, wordt de gebruiker met root-rechten aangemaakt voor authenticatie via socket. Dit geldt zowel voor MySQL als voor MariaDB.
root@app:~# apt-cache show mysql-server-5.7 | grep -i maintainers
Originele Onderhouders: Debian MySQL Onderhouders <pkg-mysql-maint@lists.alioth.debian.org>
Originele Onderhouders: Debian MySQL Onderhouders <<a href="mailto:pkg-mysql-maint@lists.alioth.debian.org">pkg-mysql-maint@lists.alioth.debian.org</a>>Met de Debian-pakketten voor MySQL wordt de root-gebruiker als volgt geauthenticeerd:
root@app:~# whoami
root=
root@app:~# mysql
Welkom bij de MySQL-monitor. Commando's eindigen met ; of g.
Je MySQL-verbinding id is 4
Serverversie: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2019, Oracle en/of zijn dochterondernemingen. Alle rechten voorbehouden.
Oracle is een geregistreerd handelsmerk van Oracle Corporation en/of zijn
dochters. Andere namen kunnen handelsmerken zijn van hun respectieve
bezitters.
Typ 'help;' of 'h' voor hulp. Typ 'c' om de huidige invoeraanroep te wissen.
mysql> select user, host, plugin, authentication_string from mysql.user where user = 'root';
+------+-----------+-------------+-----------------------+
| user | host | plugin | authentication_string |
+------+-----------+-------------+-----------------------+
| root | localhost | auth_socket | |
+------+-----------+-------------+-----------------------+
1 rij in set (0.01 sec)Hetzelfde geldt voor het .deb-pakket voor 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 rijen in set (0.00 sec)De .deb-pakketten uit de officiƫle Percona-repository stellen ook de authenticatie van gebruikers met root-rechten in op auth-socket en voor Percona Server. Laten we een voorbeeld geven van en Ubuntu 16.04:
root@app:~# whoami
root
root@app:~# mysql
Welkom bij de MySQL-monitor.Ā Commando's eindigen met ; of g.
Je MySQL-verbinding-ID is 9
Serverversie: 8.0.16-7 Percona Server (GPL), Release '7', Revisie '613e312'
Copyright (c) 2009-2019 Percona LLC en/of zijn partners
Copyright (c) 2000, 2019, Oracle en/of zijn partners. Alle rechten voorbehouden.
Oracle is een eigeregisterd handelsmerk van Oracle Corporation en/of zijn
partners. Andere namen kunnen handelsmerken zijn van hun respectieve
eigenaren.
Typ 'help;' of 'h' voor hulp. Typ 'c' om de huidige invoerverklaring te wissen.
mysql> select user, host, plugin, authentication_string from mysql.user where user ='root';
+------+-----------+-------------+-----------------------+
| user | host | plugin | authentication_string |
+------+-----------+-------------+-----------------------+
| root | localhost | auth_socket | |
+------+-----------+-------------+-----------------------+
1 rij in set (0.00 sec)Wat is dan de magie? De plug-in controleert of de Linux-gebruiker overeenkomt met de MySQL-gebruiker door gebruik te maken van de socket-optie SO_PEERCRED ā om informatie over de gebruiker te verzamelen die het clientprogramma uitvoert. De plug-in kan dus alleen worden gebruikt op systemen die de SO_PEERCRED-optie ondersteunen, zoals Linux. De socket-optie SO_PEERCRED maakt het mogelijk om de uid van het proces dat met de socket is verbonden, te leren kennen. En vervolgens verkrijgt het de gebruikersnaam die aan deze uid is gekoppeld.
Laten we een voorbeeld geven met de gebruiker 'vagrant':
vagrant@mysql1:~$ whoami
vagrant
vagrant@mysql1:~$ mysql
ERROR 1698 (28000): Toegang geweigerd voor gebruiker 'vagrant'@'localhost'Aangezien er geen gebruiker 'vagrant' in MySQL is, is toegang geweigerd. Laten we een dergelijke gebruiker aanmaken en het opnieuw proberen:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket;
Query OK, 0 rijen beĆÆnvloed (0.00 sec)
vagrant@mysql1:~$ mysql
Welkom bij de MariaDB-monitor.Ā Commando's eindigen met ; of g.
Je MariaDB-verbinding-ID is 45
Serverversie: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab en anderen.
Typ 'help;' of 'h' voor hulp. Typ 'c' om de huidige invoerverklaring te wissen.
MariaDB [(none)]> show grants;
+---------------------------------------------------------------------------------+
| Grants for vagrant@localhost |
+---------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket |
+---------------------------------------------------------------------------------+
1 rij in set (0.00 sec)Gelukt!
En wat als we een niet-Debian distributie hebben, waar dit standaard niet is voorzien? Laten we Percona Server for MySQL 8 proberen, geĆÆnstalleerd op CentOS 7:
mysql> show variables like '%version%comment';
+-----------------+---------------------------------------------------+
| Variable_name | Value |
+-----------------+---------------------------------------------------+
| version_comment | Percona Server (GPL), Release 7, Revisie 613e312 |
+-----------------+---------------------------------------------------+
1 rij in set (0.01 sec)
mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
ERROR 1524 (HY000): Plug-in 'auth_socket' is niet geladenJammer. Wat ontbrak er? De plug-in is niet geladen:
mysql> pager grep socket
PAGER ingesteld op 'grep socket'
mysql> show plugins;
47 rijen in set (0,00 sec)Laten we de plug-in aan het proces toevoegen:
mysql> nopager
PAGER ingesteld op stdout
mysql> INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
Query OK, 0 rijen aangetast (0,00 sec)
mysql> pager grep socket; show plugins;
PAGER ingesteld op 'grep socket'
| auth_socket | ACTIEF | AUTHENTICATIE | auth_socket.so | GPL |
48 rijen in set (0,00 sec)Nu hebben we alles wat we nodig hebben. Laten we het nog eens proberen:
mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
Query OK, 0 rijen aangetast (0,01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'percona'@'localhost';
Query OK, 0 rijen aangetast (0,01 sec)Nu kun je inloggen met de gebruikersnaam 'percona'.
[percona@ip-192-168-1-111 ~]$ whoami
percona
[percona@ip-192-168-1-111 ~]$ mysql -upercona
Welkom bij de MySQL monitor. Opdrachten eindigen met ; of g.
Je MySQL-verbinding-id is 19
Serverversie: 8.0.16-7 Percona Server (GPL), Release 7, Revision 613e312
Copyright (c) 2009-2019 Percona LLC en/of haar dochterondernemingen
Copyright (c) 2000, 2019, Oracle en/of haar dochterondernemingen. Alle rechten voorbehouden.
Oracle is een geregistreerd handelsmerk van Oracle Corporation en/of haar
dochterondernemingen. Andere namen kunnen handelsmerken zijn van hun respectieve
eigenaren.
Typ 'help;' of 'h' voor hulp. Typ 'c' om de huidige invoeraanroep te wissen.
mysql> select user, host, plugin, authentication_string from mysql.user where user ='percona';
+---------+-----------+-------------+-----------------------+
| user | host | plugin | authentication_string |
+---------+-----------+-------------+-----------------------+
| percona | localhost | auth_socket | |
+---------+-----------+-------------+-----------------------+
1 rij in set (0,00 sec)En het is gelukt!
Vraag: zal het mogelijk zijn om in te loggen met dezelfde gebruikersnaam percona, maar vanaf een andere gebruiker?
[percona@ip-192-168-1-111 ~]$ logout
[root@ip-192-168-1-111 ~]# mysql -upercona
ERROR 1698 (28000): Toegang geweigerd voor gebruiker 'percona'@'localhost'Nee, dat wordt niet mogelijk.
Uitslag
MySQL is op verschillende manieren flexibel, waarvan ƩƩn de authenticatiemethode is. Zoals uit deze post blijkt, kan toegang verleend worden zonder wachtwoorden, op basis van OS-gebruikers. Dit kan nuttig zijn in bepaalde scenario's, en ƩƩn van deze scenario's is wanneer je migreert van RDS/Aurora naar gewone MySQL, gebruikmakend van , zodat je toch toegang kunt krijgen, maar zonder wachtwoorden.
Bron: habr.com
