La nueva instalación de mariaDB 10.5.12 en Debian 11 se fortaleció con el script 'mysql_secure_installation', la pregunta "Cambiar a autenticación Unix_socket [S/n]" se respondió con 'sí'.
Ahora mariaDB permite que la raíz local inicie sesión cuando el host es igual a 'localhost':
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)]>
pero rechaza cuando se utilizó la dirección IP:
mysql --host=127.0.0.1
ERROR 1698 (28000): Access denied for user 'root'@'127.0.0.1'
Después de algunas modificaciones, se realizaron las siguientes modificaciones en la base de datos:
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;
El parámetro "skip-name-resolve" no está presente en la configuración del servidor:
show variables like '%skip_name%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| skip_name_resolve | OFF |
+-------------------+-------+
Las cuentas raíz relevantes ahora son:
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 |
+------+----------+-----------+-------------+
Por alguna razón, la raíz local puede acceder a 'localhost' pero no acceder a la base de datos ni cuando se conecta a través de "127.0.0.1" ni cuando se conecta a través de "::1".
Por qué ?
Respuesta1
En resumen, localhost
se trata comousar enchufe.esta respuestaen StackOverflow lo explica:
El servidor MariaDB (también MySQL) trata a localhost de una manera especial. Mientras que otro software lo trata como un alias de la dirección de loopback 127.0.0.1, MariaDB lo interpretará como una conexión de socket de dominio UNIX al servidor. De forma predeterminada, este archivo de socket se encuentra en /var/lib/mysql/mysql.sock.
Como no se conecta a través del socket cuando usa 127.0.0.1
, la autenticación del socket no funciona. Tienes que usar localhost
o el --socket=/path/to/socket
.