Новая установка 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
.