A nova instalação do mariaDB 10.5.12 no debian 11 foi reforçada com o script 'mysql_secure_installation', a pergunta "Mudar para autenticação unix_socket [S/n]" foi respondida com 'sim'.
Agora o mariaDB permite que o root local faça login quando o host for 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)]>
mas rejeita quando o endereço IP foi usado:
mysql --host=127.0.0.1
ERROR 1698 (28000): Access denied for user 'root'@'127.0.0.1'
depois de algumas modificações, as seguintes modificações foram realizadas no banco de dados:
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;
O parâmetro "skip-name-resolve" não está presente na configuração do servidor:
show variables like '%skip_name%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| skip_name_resolve | OFF |
+-------------------+-------+
contas root relevantes agora são:
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 alguma razão, o root local tem permissão para acessar 'localhost', mas não para acessar o banco de dados nem ao conectar via "127.0.0.1" nem ao conectar via "::1".
Por que ?
Responder1
Em suma, localhost
é tratado comousar soquete.Esta respostano StackOverflow explica:
O servidor MariaDB (também MySQL) trata o localhost de uma maneira especial. Enquanto outros softwares o tratam como um alias do endereço de loopback 127.0.0.1, o MariaDB irá interpretá-lo como uma conexão de soquete de domínio UNIX com o servidor. Por padrão, este arquivo de soquete está localizado em /var/lib/mysql/mysql.sock.
Como você não está se conectando através do soquete ao usar 127.0.0.1
, a autenticação do soquete não funciona. Você tem que usar localhost
ou o --socket=/path/to/socket
.