1

我正在尝试使用Adminer连接到 MariaDB 数据库,但是当我按下登录按钮时出现“权限被拒绝”错误。请注意,如果密码错误,这不是我期望的“访问被拒绝”。

这是我第一次使用 MariaDB,而且我对 CentOS 也很陌生,我不确定这里出了什么问题。下面列出了有关我的系统的一些调试和设置。

从 PHP 连接到 MariaDB 确实有效,例如使用以下测试脚本:

<?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
4

1 回答 1

3

造成这种情况的主要原因是错误的 SELinux 设置,但还有一个严重的 MariaDB 错误会影响这一点。

SELinux 具有布尔值httpd_can_network_connect_db,它定义 HTTP 服务器脚本和模块是否可以连接到数据库服务器。这默认为off

$ getsebool httpd_can_network_connect_db
httpd_can_network_connect_db --> off

转动它on并重新启动* Apache 允许使用以下方式从管理员连接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
于 2016-07-30T13:44:47.600 回答