【问题标题】:PDO keeps connecting to wrong IPPDO 一直连接到错误的 IP
【发布时间】:2018-03-12 10:13:33
【问题描述】:

当我尝试使用此代码从我的 WAMP 服务器安装连接到我的外部服务器(允许外部连接)时:

const SERVER = 'xxx.xxx.xxx.xx'; // Redacted, the target servers IP
const PORT = 3306; 
const DATABASE = 'xxx'; // Redacted
const USERNAME = 'xxx'; // Redacted
const PASSWORD = 'xxx'; // Redacted
const TIMEOUT = 5;

try
{
    $pdo = new PDO('mysql:dbname=' . DATABASE . ';host=' . SERVER . ';port=' . PORT, USERNAME, PASSWORD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_TIMEOUT => TIMEOUT));
}
catch (PDOException $e)
{
    echo $e->getMessage();
}

我收到以下错误消息: SQLSTATE[HY000] [1045] Access denied for user 'main'@'xxx.xxx.xxx.xx' (using password: YES) 其中 IP 地址是我的外部(不是 LAN)IP 地址,而不是我指定的地址。

我之前尝试过这段代码,它运行时没有任何问题,但现在突然由于我不知道的原因,它尝试连接到我自己的 IP 并失败。我做错了什么?

【问题讨论】:

  • 外部服务器是在您的局域网之外还是在您的局域网中?如果它位于您 LAN 以外的 Internet 上的其他位置,您需要将 GRANT 发送给您的外部(路由器、NAT)IP 地址上的用户。
  • @MichaelBerkowski 我已经这样做了,正如我在帖子中所说,到目前为止一切正常。
  • 它尝试连接到我自己的 IP 并失败 错误 Access denied for user 'main'@'xxx.xxx.xxx.xx' 表示 MySQL 的基于主机的身份验证拒绝来自您的外部(NAT/路由器)IP 的访问,而不是 PDO 正在尝试 connect 到该 IP。假设您对 MySQL 服务器具有其他管理访问权限,您需要检查您的用户 main 的授权。 MySQL auth 是用户名、密码和 连接主机 的组合,即使是同一个用户也可以从 2 个不同的源主机获得 2 个不同的密码。
  • 您究竟是如何允许外部连接到您的远程数据库服务器的

标签: php pdo wamp wampserver


【解决方案1】:

我的 root 用户和其他用户遇到了完全相同的问题。我试图使用 PDO() 从另一个远程服务器 B 连接到远程服务器 A。虽然,我可以使用 CLI 从远程服务器 B 登录到 mysql 远程服务器 A,但不能通过 PDO。

两个远程服务器都在运行:

  • Ubuntu 20.04
  • 使用 readline 5.2 分发 10.3.25-MariaDB

问题是我的 root 和用户密码中有特殊字符。有#, (, !, )。所以我更改了我的密码,它开始工作了。

为了解决这个问题,我用两天的时间扫描了整个互联网。不知道它可能是密码。

【讨论】:

  • 第一个 - 谢谢!第二个.. 哇?!
【解决方案2】:

一旦我以这种方式存储数据库凭据:

$ cat testing.properties 
db.user = root
db.host = qwe-test.cb6vlepud6c.eu-west-1.rds.amazonaws.com
db.pass = Lix8+GPOf;SHQakU

然后用parse_ini_file阅读它们:

$ php -r 'var_dump(parse_ini_file("testing.properties"));'
array(3) {
  ["db.user"]=>
  string(4) "root"
  ["db.host"]=>
  string(51) "qwe-test.cb6vlepud6c.eu-west-1.rds.amazonaws.com"
  ["db.pass"]=>
  string(9) "Lix8+GPOf"
}

所以你可以看到密码不正确。这就是我的情况,我看到了下一个错误:Access denied for user 'root'@'172.31.40.198'。由于密码错误,域名qwe-test.cb6vlepud6c.eu-west-1.rds.amazonaws.com被替换为主机IP地址172.31.40.198

【讨论】:

    猜你喜欢
    • 2016-03-29
    • 2014-12-09
    • 2016-04-15
    • 1970-01-01
    • 2016-10-18
    • 2014-06-07
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多