[이메일 보호]에 대한 mariaDB 10.5.12 액세스가 거부되었습니다.

[이메일 보호]에 대한 mariaDB 10.5.12 액세스가 거부되었습니다.

debian 11에 mariaDB 10.5.12를 새로 설치하면 'mysql_secure_installation' 스크립트로 강화되었으며, "unix_socket 인증으로 전환 [Y/n]"이라는 질문에 '예'로 대답했습니다.

이제 mariaDB에서는 호스트가 '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)]>

그러나 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.

관련 정보