mariaDB 10.5.12 Zugriff verweigert für

mariaDB 10.5.12 Zugriff verweigert für

Die Neuinstallation von MariaDB 10.5.12 auf Debian 11 wurde mit dem Skript „mysql_secure_installation“ gesichert, die Frage „Zur Unix_Socket-Authentifizierung wechseln [J/n]“ wurde mit „Ja“ beantwortet.

Jetzt erlaubt MariaDB die Anmeldung des lokalen Root-Benutzers, wenn der Host gleich „localhost“ ist:

mysql --host=localhost
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 40
Server version: 10.5.12-MariaDB-0+deb11u1-log Debian 11

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)]>

lehnt aber ab, wenn eine IP-Adresse verwendet wurde:

mysql --host=127.0.0.1
ERROR 1698 (28000): Access denied for user 'root'@'127.0.0.1'

Nach einigem Duckducking wurden folgende Änderungen an der Datenbank durchgeführt:

CREATE USER 'root'@'::1' IDENTIFIED VIA unix_socket;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'::1' WITH GRANT OPTION;
CREATE USER 'root'@'127.0.0.1' IDENTIFIED VIA unix_socket;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;
flush privileges;

Der Parameter „skip-name-resolve“ ist in der Serverkonfiguration nicht vorhanden:

show variables like '%skip_name%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| skip_name_resolve | OFF   |
+-------------------+-------+

Die relevanten Root-Konten sind nun:

MariaDB [mysql]> select user, password, host, plugin from user where user='root';
+------+----------+-----------+-------------+
| User | Password | Host      | plugin      |
+------+----------+-----------+-------------+
| root |          | localhost | unix_socket |
| root |          | ::1       | unix_socket |
| root |          | 127.0.0.1 | unix_socket |
+------+----------+-----------+-------------+

Aus irgendeinem Grund darf der lokale Root auf „localhost“ zugreifen, nicht jedoch auf die Datenbank, weder bei einer Verbindung über „127.0.0.1“ noch bei einer Verbindung über „::1“.

Warum ?

Antwort1

Kurz gesagt localhostwird behandelt alsSockel verwenden.Diese Antwortauf StackOverflow wird es erklärt:

Der MariaDB-Server (auch MySQL) behandelt localhost auf besondere Weise. Während andere Software es wie einen Alias ​​der Loopback-Adresse 127.0.0.1 behandelt, interpretiert MariaDB es als eine UNIX-Domain-Socket-Verbindung zum Server. Standardmäßig befindet sich diese Socket-Datei in /var/lib/mysql/mysql.sock.

Da Sie bei Verwendung keine Verbindung über den Socket herstellen 127.0.0.1, funktioniert die Socket-Authentifizierung nicht. Sie müssen entweder localhostoder verwenden --socket=/path/to/socket.

verwandte Informationen