mariaDB 10.5.12 доступ запрещен для

mariaDB 10.5.12 доступ запрещен для

Новая установка mariaDB 10.5.12 на Debian 11 была усилена с помощью скрипта «mysql_secure_installation», на вопрос «Переключиться на аутентификацию unix_socket [Y/n]» был дан ответ «да».

Теперь mariaDB позволяет локальному пользователю root входить в систему, если host равен «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   |
+-------------------+-------+

Соответствующие учетные записи root теперь:

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

По какой-то причине локальному пользователю root разрешен доступ к «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.

Связанный контент