
ThonĂ« se fjalĂ«kalimi mĂ« i mirĂ« Ă«shtĂ« ai qĂ« nuk duhet ta mbash mend. NĂ« rastin e MySQL, kjo Ă«shtĂ« e mundur falĂ« plugin-it dhe versionit tĂ« tij pĂ«r MariaDB â .
Të dy këta pluginë nuk janë aspak të rinj, janë diskutuar shumë në këtë blog, për shembull në artikullin rreth . Megjithatë, duke shqyrtuar çfarë është e re në MariaDB 10.4, zbulova se unix_socket tani instalçohet si parazgjedhje dhe është një nga metodat e autentifikimit («një nga», sepse në MariaDB 10.4 një përdoruesi i janë në dispozicion më shumë se një plugin për autentifikim, siç shpjegohet në dokumentin ).
Ashtu siç thashë më parë, kjo nuk është e re, dhe kur instalon MySQL duke përdorur paketat .deb të mbështetura nga ekipi i Debianit, përdoruesi me të drejta root krijohet për autentifikim përmes socket-it. Kjo është e saktë si për MySQL ashtu edhe për MariaDB.
root@app:~# apt-cache show mysql-server-5.7 | grep -i maintainers
Mirembajtësi Origjinal: Mirembajtësit e MySQL të Debianit <pkg-mysql-maint@lists.alioth.debian.org>
Mirembajtësi Origjinal: Mirembajtësit e MySQL të Debianit <<<a href="mailto:pkg-mysql-maint@lists.alioth.debian.org">pkg-mysql-maint@lists.alioth.debian.org</a></a>>Me paketat Debian pĂ«r MySQL, pĂ«rdoruesi root autentifikohet si nĂ« vijim:
root@app:~# whoami
root=
root@app:~# mysql
Mirë se erdhët në monitorin MySQL. Komandat mbarojnë me ; ose g.
ID e lidhjes tuaj MySQL është 4
Versioni i serverit: 5.7.27-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2019, Oracle dhe/ose filialet e saj. Të gjitha të drejtat e rezervuara.
Oracle është një markë tregtare e Oracle Corporation dhe/ose filialet e saj. Emra të tjerë mund të jenë marka tregtare të pronarëve të tyre përkatës.
Shkruani 'help;' ose 'h' për ndihmë. Shkruani 'c' për të pastruar deklaratën aktuale të inputit.
mysql> select user, host, plugin, authentication_string from mysql.user where user = 'root';
+------+-----------+-------------+-----------------------+
| user | host   | plugin | authentication_string |
+------+-----------+-------------+-----------------------+
| root | localhost | auth_socket | Â Â Â Â Â Â Â Â Â Â Â |
+------+-----------+-------------+-----------------------+
1 rresht në set (0.01 sekondë)Kështu është edhe në rastin e paketës .deb për MariaDB:
10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
MariaDB [(none)]> show grants;
+------------------------------------------------------------------------------------------------+
| Grants pë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 rreshta në set (0.00 sekondë)Paketat .deb nga repozitori zyrtar Percona gjithashtu konfigurojnë autentifikimin e përdoruesit me të drejta root nën auth-socket dhe për Percona Server. Le të japim një shembull me dhe Ubuntu 16.04:
root@app:~# whoami
root
root@app:~# mysql
Mirë se erdhët në monitorin MySQL. Komandat mbarojnë me ; ose g.
ID e lidhjes tuaj MySQL është 9
Versioni i serverit: 8.0.16-7 Percona Server (GPL), Publikimi '7', Rishikimi '613e312'
Copyright (c) 2009-2019 Percona LLC dhe/ose filialet e saj
Copyright (c) 2000, 2019, Oracle dhe/ose filialet e saj. Të gjitha të drejtat e rezervuara.
Oracle është një markë tregtare e Oracle Corporation dhe/ose filialet e saj. Emra të tjerë mund të jenë marka tregtare të pronarëve të tyre përkatës.
Shkruani 'help;' ose 'h' për ndihmë. Shkruani 'c' për të pastruar deklaratën aktuale të inputit.
mysql> select user, host, plugin, authentication_string from mysql.user where user ='root';
+------+-----------+-------------+-----------------------+
| user | host   | plugin | authentication_string |
+------+-----------+-------------+-----------------------+
| root | localhost | auth_socket | Â Â Â Â Â Â Â Â Â Â Â |
+------+-----------+-------------+-----------------------+
1 rresht nĂ« set (0.00 sekondĂ«)Pra, çfarĂ« Ă«shtĂ« magia? Plugin-i verifikon se pĂ«rdoruesi Linux pĂ«rputhet me pĂ«rdoruesin MySQL, duke pĂ«rdorur opsionin e soket-it SO_PEERCRED â pĂ«r tĂ« grumbulluar informacionin mbi pĂ«rdoruesin qĂ« ekzekuton programin klient. KĂ«shtu, plugin-i mund tĂ« pĂ«rdoret vetĂ«m nĂ« sisteme qĂ« mbĂ«shtesin opsionin SO_PEERCRED, si Linux i njĂ«jtĂ«. Opsioni i soket-it SO_PEERCRED lejon qĂ« tĂ« zbulohet uid i lidhur me soketin e procesit. Dhe pastaj ai merr emrin e pĂ«rdoruesit tĂ« lidhur me kĂ«tĂ« uid.
Le të japim një shembull me përdoruesin «vagrant»:
vagrant@mysql1:~$ whoami
vagrant
vagrant@mysql1:~$ mysql
ERROR 1698 (28000): Access denied for user 'vagrant'@'localhost'Duke qenë se në MySQL nuk ka përdoruesit «vagrant», na është ndaluar aksesin. Le të krijojmë një përdorues të tillë dhe të provojmë sërish:
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket;
Kërkesa OK, 0 rreshta të prekur (0.00 sekondë)
vagrant@mysql1:~$ mysql
Mirë se erdhët në monitorin MariaDB. Komandat mbarojnë me ; ose g.
ID e lidhjes tuaj MariaDB është 45
Versioni i serverit: 10.0.38-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab dhe të tjerë.
Shkruani 'help;' ose 'h' për ndihmë. Shkruani 'c' për të pastruar deklaratën aktuale të inputit.
MariaDB [(none)]> show grants;
+---------------------------------------------------------------------------------+
| Grants për vagrant@localhost                          |
+---------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'vagrant'@'localhost' IDENTIFIED VIA unix_socket |
+---------------------------------------------------------------------------------+
1 rresht në set (0.00 sekondë)Kemi arritur!
Mirë, çfarë ndodh me një distro që nuk është Debian, ku kjo nuk është parazgjedhje? Le të provojmë Percona Server for MySQL 8, të instaluar në CentOS 7:
mysql> show variables like '%version%comment';
+-----------------+---------------------------------------------------+
| Variable_name  | Value                  |
+-----------------+---------------------------------------------------+
| version_comment | Percona Server (GPL), Release 7, Rishikimi 613e312 |
+-----------------+---------------------------------------------------+
1 rresht në set (0.01 sekondë)
mysql> CREATE USER 'percona'@'localhost' IDENTIFIED WITH auth_socket;
ERROR 1524 (HY000): Plugin 'auth_socket' is not loadedDĂ«shtim. ĂfarĂ« mungon? Plugin-i nuk Ă«shtĂ« ngarkuar:
mysql> pager grep socket
PAGER e vendosur në 'grep socket'
mysql> show plugins;
47 rreshta në set (0.00 sekondë)Le të shtojmë plugin-in në 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)Tani tani tani tani! Provojmë përsëri:
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)Tani mund të kyçemi në sistem me emrin e përdoruesit «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)Dhe përsëri ia dolëm!
Pyetje: A do të mund të kyçemi në sistem me të njëjtin emër përdoruesi percona, por nga një përdorues tjetër?
[percona@ip-192-168-1-111 ~]$ logout
[root@ip-192-168-1-111 ~]# mysql -upercona
ERROR 1698 (28000): Access denied for user 'percona'@'localhost'Jo, nuk do të mundemi.
Përfundim
MySQL është mjaft fleksibel në disa aspekte, njëri prej të cilëve është metoda e autentifikimit. Siç shihet në këtë post, mund të fitohet qasje pa fjalëkalime, në bazë të përdoruesve të OS. Kjo mund të jetë e dobishme në skenarë të caktuar, dhe një prej tyre është kur migroni nga RDS/Aurora në MySQL të zakonshëm, duke përdorur , për të vazhduar qasjen, por pa fjalëkalime.
Burimi: habr.com
