Acesso ao mariaDB 10.5.12 negado para

Acesso ao mariaDB 10.5.12 negado para

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 localhostou o --socket=/path/to/socket.

informação relacionada