【问题标题】:mysqlnd gives 'permission denied' for all connections to a remote hostmysqlnd 为与远程主机的所有连接提供“权限被拒绝”
【发布时间】:2020-05-14 09:55:21
【问题描述】:

这与“本地主机”无关。 'mysql' 的命令行版本以及我用 Perl 编写的脚本(使用 perl-DBD-MySQL)都可以登录、访问该数据库并使用它。只有 PHP 给出了权限被拒绝错误,并且该错误不会在任何各种日志文件中报告。我什至在数据库中创建了一个简单的测试用户,以避免密码中的特殊字符出现任何问题:

创建由 'Iamnotarobot' 识别的用户 'web'@'%';

命令行可以再次使用此凭据登录,但 PHP 说权限被拒绝。

我不知道是什么引发了错误,所以我无法解决它。我真的迷路了。 相关资料: RHEL 8 = 4.18.0 php 7.2.11 nginx 1.14.1

这是实际失败的代码:

<?php
$host="core";
$user="web";
$pass="Iamnotarobot";
$db="mydb";

$conn = new mysqli($host,$user,$pass,$db);
if( $conn->connect_errno ) {
  exit($conn->connect_errno);
}
?>

【问题讨论】:

  • 您在正确的端口上吗,也许在另一个端口上启动您的服务器并将该端口添加到您的请求中。
  • 您确实阅读了有关其他事物如何访问同一数据库的部分?

标签: php mysql mysqli selinux


【解决方案1】:

原来是 selinux 的问题。这是我修复它的方法:

setsebool -P httpd_can_network_connect_db 1

现在setenforce回到'1',页面就可以连接到数据库了。

【讨论】:

    【解决方案2】:

    检查 php-mysql 安装包。

    如果 perl 可以远程连接而 php 不能...问题仅在于 php-mysql 安装。

    【讨论】:

    • Mysql 命令行工具和 perl 可以从这台机器连接到同一主机上的同一数据库。所以是的,这必须是 php-mysqlnd 和或 php-fpm 问题。
    • 如果您尝试重新安装 php-mysql 模块...您也应该尝试另一种可能性。
    • SELinux 可能会阻碍您的任何文件权限(包括 Web 日志文件、/etc/httpd 或 apache2)。检查 ls -l -Z 以获得 /etc/ /log/ 等下的所有相关文件。或者发出 setenforce 0 然后通过 php 进行检查。因为要访问 web 日志文件(和一些 /etc/ 文件)才能运行 php,而不是访问 mysql 命令行和从 bash 运行的 perl 脚本(cgi-bin perl 脚本除外)
    • 我目前使用的是系统的第 4 版,并且我可以使用 perl。我还没有安装任何与服务网页相关的东西,但是一旦我这样做了,我会试试 setenforce 的东西。实际上我认为它会变成类似于 selinux 的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 2018-05-08
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多