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'

經過一些鴨鴨式修改後,對資料庫進行了以下修改:

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)以特殊方式對待本機。其他軟體將其視為環回位址 127.0.0.1 的別名,而 MariaDB 會將其解釋為與伺服器的 UNIX 網域套接字連接。預設情況下,此套接字檔案位於/var/lib/mysql/mysql.sock 中。

由於使用時沒有透過套接字連接127.0.0.1,因此套接字驗證不起作用。您必須使用localhost--socket=/path/to/socket.

相關內容