Я пытаюсь использовать 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
Основной причиной этого является неправильная настройка 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
Других решений пока нет …