
Λένε ότι ο καλύτερος κωδικός πρόσβασης είναι αυτός που δεν χρειάζεται να θυμάστε. Στην περίπτωση της MySQL, αυτό είναι δυνατό χάρη στο πρόσθετο και οι εκδόσεις του για MariaDB — .
Και τα δύο αυτά πρόσθετα δεν είναι καθόλου καινούργια, έχουν συζητηθεί πολύ σε αυτό το ιστολόγιο, για παράδειγμα στο άρθρο σχετικά με Ωστόσο, ενώ εξέταζα τι νέο υπάρχει στο MariaDB 10.4, ανακάλυψα ότι το unix_socket είναι πλέον εγκατεστημένο από προεπιλογή και είναι μία από τις μεθόδους ελέγχου ταυτότητας ("μία από"), επειδή στο MariaDB 10.4 είναι διαθέσιμα περισσότερα από ένα πρόσθετα για έλεγχο ταυτότητας ανά χρήστη, όπως εξηγείται στο έγγραφο. ).
Όπως είπα, αυτό δεν είναι είδηση, και όταν εγκαθιστάτε το MySQL χρησιμοποιώντας την υποστηριζόμενη ομάδα Debian Για τα πακέτα .deb, δημιουργείται ένας χρήστης root για τον έλεγχο ταυτότητας socket. Αυτό ισχύει τόσο για το MySQL όσο και για το 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>>Με τσάντες Debian Για την MySQL, ο χρήστης root ελέγχεται ως εξής:
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)Το ίδιο ισχύει και για το πακέτο .deb για το 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)Τα πακέτα .deb από το επίσημο αποθετήριο Percona ρυθμίζουν επίσης τον έλεγχο ταυτότητας χρήστη root για το auth-socket και για τον Percona Server. Ακολουθεί ένα παράδειγμα με и 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)Ποια είναι λοιπόν η μαγεία; Το πρόσθετο ελέγχει ότι ο χρήστης Linux ταιριάζει με τον χρήστη MySQL χρησιμοποιώντας την επιλογή υποδοχής SO_PEERCRED για τη συλλογή πληροφοριών σχετικά με τον χρήστη που εκτελεί το πρόγραμμα-πελάτη. Επομένως, το πρόσθετο μπορεί να χρησιμοποιηθεί μόνο σε συστήματα που υποστηρίζουν την επιλογή SO_PEERCRED, όπως LinuxΗ επιλογή socket SO_PEERCRED σάς επιτρέπει να προσδιορίσετε το UID της διεργασίας που σχετίζεται με την υποδοχή. Στη συνέχεια, η διεργασία λαμβάνει το όνομα χρήστη που σχετίζεται με αυτό το UID.
Ας πάρουμε ένα παράδειγμα με τον χρήστη "vagrant":
vagrant@mysql1:~$ whoami
vagrant
vagrant@mysql1:~$ mysql
ERROR 1698 (28000): Access denied for user 'vagrant'@'localhost'Δεδομένου ότι η MySQL δεν έχει χρήστη με όνομα "vagrant", δεν μας επιτρέπεται η πρόσβαση. Ας δημιουργήσουμε έναν τέτοιο χρήστη και ας προσπαθήσουμε ξανά:
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)Συνέβη!
Λοιπόν, τι γίνεται με τα μη-Debian διανομή όπου αυτό δεν παρέχεται από προεπιλογή; Ας δοκιμάσουμε το Percona Server για MySQL 8, εγκατεστημένο στο 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 loadedΚρίμα. Τι έλειπε; Το πρόσθετο δεν έχει φορτωθεί:
mysql> pager grep socket
PAGER set to 'grep socket'
mysql> show plugins;
47 rows in set (0.00 sec)Ας προσθέσουμε ένα πρόσθετο (plugin) στη διαδικασία:
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)Τώρα έχουμε όλα όσα χρειαζόμαστε. Ας προσπαθήσουμε ξανά:
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)Τώρα μπορείτε να συνδεθείτε χρησιμοποιώντας το όνομα χρήστη "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)Και λειτούργησε ξανά!
Ερώτηση: Θα είναι δυνατή η σύνδεση στο σύστημα χρησιμοποιώντας τα ίδια στοιχεία σύνδεσης χρήστη, αλλά από διαφορετικό χρήστη;
[percona@ip-192-168-1-111 ~]$ logout
[root@ip-192-168-1-111 ~]# mysql -upercona
ERROR 1698 (28000): Access denied for user 'percona'@'localhost'Όχι, δεν θα λειτουργήσει.
Παραγωγή
Η MySQL είναι αρκετά ευέλικτη με διάφορους τρόπους, ένας από τους οποίους είναι η μέθοδος ελέγχου ταυτότητας. Όπως μπορείτε να δείτε από αυτήν την ανάρτηση, η πρόσβαση μπορεί να αποκτηθεί χωρίς κωδικούς πρόσβασης, με βάση τους χρήστες του λειτουργικού συστήματος. Αυτό μπορεί να είναι χρήσιμο σε ορισμένα σενάρια, και ένα από αυτά είναι κατά τη μετεγκατάσταση από RDS/Aurora σε κανονική MySQL, χρησιμοποιώντας να εξακολουθεί να έχει πρόσβαση, αλλά χωρίς κωδικούς πρόσβασης.
Πηγή: www.habr.com
