"Permission denied" 来自管理员的 root@localhost 错误
"Permission denied" error from Adminer with root@localhost
我正在尝试使用 Adminer 连接到 MariaDB 数据库,但是当我按下登录按钮时出现 "Permission denied" 错误。请注意,这不是我期望的 "Access denied",例如密码错误。
这是我第一次使用 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 |
+--------------------------------------------------------------------------------------------------+
管理员中的设置:
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 允许使用 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
我正在尝试使用 Adminer 连接到 MariaDB 数据库,但是当我按下登录按钮时出现 "Permission denied" 错误。请注意,这不是我期望的 "Access denied",例如密码错误。
这是我第一次使用 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 |
+--------------------------------------------------------------------------------------------------+
管理员中的设置:
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 允许使用 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