mariaDB 10.5.12 [email protected] へのアクセスが拒否されました

mariaDB 10.5.12 [email protected] へのアクセスが拒否されました

debian 11 への mariaDB 10.5.12 の新規インストールは 'mysql_secure_installation' スクリプトで強化され、質問「unix_socket 認証に切り替える [Y/n]」には 'yes' と答えました。

これで、ホストが 'localhost' に等しい場合、mariaDB はローカル ルートのログインを許可します。

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 も同様) は、localhost を特別な方法で扱います。他のソフトウェアがこれをループバック アドレス 127.0.0.1 のエイリアスとして扱うのに対し、MariaDB はこれをサーバーへの UNIX ドメイン ソケット接続として解釈します。デフォルトでは、このソケット ファイルは /var/lib/mysql/mysql.sock にあります。

を使用する場合、ソケット経由で接続していないため127.0.0.1、ソケット認証は機能しません。 または を使用する必要がありlocalhostます--socket=/path/to/socket

関連情報