mariaDB 10.5.12 访问被拒绝

mariaDB 10.5.12 访问被拒绝

在 Debian 11 上全新安装的 mariaDB 10.5.12 已使用“mysql_secure_installation”脚本进行了强化,问题“切换到 unix_socket 身份验证 [Y/n]”的答案为“是”。

现在,当主机等于“localhost”时,mariaDB 允许本地 root 登录:

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

但使用 IP 地址时会拒绝:

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

经过一些 duckducking 操作后,对数据库进行了以下修改:

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;

服务器配置中不存在“skip-name-resolve”参数:

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

相关根帐户现在是:

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 |
+------+----------+-----------+-------------+

由于某种原因,本地根目录可以访问“localhost”,但不能访问数据库,无论是通过“127.0.0.1”连接还是通过“::1”连接。

为什么 ?

答案1

简而言之localhost使用套接字这个答案StackOverflow 上对此进行了解释:

MariaDB 服务器(也是 MySQL)以特殊方式处理 localhost。其他软件将其视为环回地址 127.0.0.1 的别名,而 MariaDB 会将其解释为与服务器的 UNIX 域套接字连接。默认情况下,此套接字文件位于 /var/lib/mysql/mysql.sock。

由于使用 时您没有通过套接字连接127.0.0.1,因此套接字身份验证不起作用。您必须使用localhost--socket=/path/to/socket

相关内容