& quot; В доступе отказано & quot; ошибка от администратора с root @ localhost

Я пытаюсь использовать Adminer подключиться к базе данных MariaDB, но я получаю сообщение об ошибке «Отказано в доступе» при нажатии кнопки «Войти». Обратите внимание, что это НЕ «Доступ запрещен», что я ожидаю, например, если пароль неверный.

Я впервые использую MariaDB, и я также совсем новичок в CentOS, не знаю, что здесь не так. Некоторые отладки и настройки моей системы перечислены ниже.

Подключение к MariaDB из PHP работает, например, с этим тестовым скриптом:

<?php
$db = mysqli_connect('127.0.0.1','root','mypassword')
or die(mysqli_error());
var_dump($db);

С помощью mysql -h 127.0.0.1 -u root -p из консоли также работает, а также netstat подтверждает, что mysqld слушает:

$ sudo netstat -tlpn | grep mysqld
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      16428/mysqld

MariaDB Гранты:

MariaDB [(none)]> show grants;
+--------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                        |
+--------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION                                    |
+--------------------------------------------------------------------------------------------------+

Настройки в Adminer:

System: MySQL
Server: 127.0.0.1
Username: root
Password: mypassword
Database: (none)

Моя система:

CentOS 7
Apache 2.4.6
PHP 5.4.16
MariaDB 10.1.16
Adminer 4.2.5

0

Решение

Основной причиной этого является неправильная настройка SELinux, но есть и критическая ошибка MariaDB, влияющая на это.

SELinux имеет логическое значение httpd_can_network_connect_db который определяет, могут ли скрипты и модули HTTP-сервера подключаться к серверу базы данных или нет. Это по умолчанию off:

$ getsebool httpd_can_network_connect_db
httpd_can_network_connect_db --> off

Превращая это on и перезапуск * Apache позволяет подключаться из Adminer используя Server: 127.0.0.1:

sudo setsebool -P httpd_can_network_connect_db on
sudo systemctl restart httpd

*) Я не уверен, действительно ли требуется перезагрузка.

Интересно, пытаясь подключиться с помощью Server: localhost все еще не работает. Это из-за критической ошибки в MariaDB 10.1.16, касающейся контекстов SELinux: MDEV-10405 & MDEV-10404

Обойти эту ошибку можно отключить NoNewPrivileges=true установка.

Создать файл /etc/systemd/system/mariadb.service.d/myfix.conf:

# temporary fix for bug https://jira.mariadb.org/browse/MDEV-10404
[Service]
NoNewPrivileges=false

А затем запустите:

sudo systemctl daemon-reload
sudo systemctl restart mariadb
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]