【问题标题】:Mysql PDO access denied for remote connection but Mysql CLI works远程连接的 Mysql PDO 访问被拒绝,但 Mysql CLI 有效
【发布时间】:2020-03-29 11:08:07
【问题描述】:

我正在尝试从我的 Web 服务器连接到远程 Mysql 服务器。我按照以下步骤操作:

在远程服务器上:

1. “CREATE USER ’newremoteuser’@‘web-server_ip' IDENTIFIED BY 'remote_user_password’;”
2. “GRANT ALL PRIVILEGES ON *.* TO 'newremoteuser'@'web_server_ip’;”
3. “FLUSH PRIVILEGES;”

在web服务器上尝试使用Mysql CLI访问时,连接成功。

"mysql -u newremoteuser -h remote_server_ip -p"

但是,当我尝试在 PHP 中使用 PDO 或 Mysqli 连接到远程服务器时,出现错误

“FastCGI 在 stderr 中发送:”PHP 消息:PHP 致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[28000] [1045] 用户 'newremoteuser'@'my-domain-name.com' 的访问被拒绝(使用密码:YES)'

以下是 PDO 代码

$REMOTEPDO = new PDO("mysql:host=$remote_server_ip;port=3306;dbname=$remote_db", $newremoteuser, $remote_user_password);
$REMOTEPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

我认为它拒绝访问'newremoteuser'@'my-domain-name.com',因为我添加的远程用户是'newremoteuser'@'web-server_ip'。但是,我找不到解决方案。谁能指出我正确的方向?

注意:“my-domain-name.com”是托管在“web_server_ip”服务器上的网站名称。

远程服务器是 Ubuntu 18,Web 服务器是 Ubuntu 14。

【问题讨论】:

  • 添加'newremoteuser'@'my-domain-name.com'到mysql?
  • 我试过这样做,但它似乎没有工作。 "字符串 'newremoteuser'@'my-domain-name.com' IDENTIFIED BY' 对于用户名来说太长(不应超过 32)"
  • 您似乎在使用非标准的“ ” 您是否在文字处理器中编码?

标签: php mysql pdo


【解决方案1】:

正如您所指出的,更改该用户的主机可能会解决您的问题,因为连接被拒绝似乎是因为主机不匹配。尝试将现有用户的主机从 IP 地址更新为域名:

UPDATE mysql.user SET Host='my-domain-name.com' WHERE User='username';
FLUSH PRIVILEGES;

如果仍然无法正常工作,可能值得将主机更新为 '%',然后查看它是否允许您连接。

【讨论】:

  • 不幸的是,这也不起作用。我什至将其更改为“%”,但似乎无法让 PDO 工作。 Mysql CLI 在所有情况下都可以工作。
【解决方案2】:

我刚刚经历了这个。我可以连接命令行但不能连接 PDO。直到我在客户端服务器的 SELinux 上启用 httpd_can_network_connect_db 并重新启动后,我的网络服务器客户端才会连接。

sudo setsebool -P httpd_can_network_connect_db 1

我忘记了重新启动并追了我的尾巴比必要的时间长了一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 2013-05-13
    • 1970-01-01
    • 2018-04-28
    • 2023-03-20
    相关资源
    最近更新 更多