【问题标题】:mysql "access denied for user" (only happens when connecting via php)mysql“用户访问被拒绝”(仅在通过 php 连接时发生)
【发布时间】:2011-09-08 21:08:32
【问题描述】:

我创建了用户dashboard 并授予它各种权限(例如SHOW DATABASES)。我最初设置了 Host=[web-server 的私有 ip],但不断收到从 php 的mysql_connect 返回的拒绝访问错误,所以我设置了Host=192.168.%,这样我们网络上的任何机器都可以访问它。

我可以使用 MySQLWorkbench 从我的 Mac 成功连接到 Db 服务器上的 mysql Db(并成功运行 SHOW DATABASES;),但是当我尝试通过我们的网络服务器上的 php 连接时,我得到:Access denied for user 'dashboard'@'192.168.xx.xx' (using password: YES)

我在 php 中使用的代码是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<?php
$dbhost = "192.168.x.x"; // but no x's
$dbuser = "dashboard";
$dbpass = "password"; // i copied&pasted the real password for other successful logins
$dbconnect = mysql_connect($dbhost, $dbuser, $dbpass) or die(mysql_error());
$query = mysql_query('SHOW DATABASES;');
?>
</head>
<body>
<? echo $query ?>
</body>
</html>

半相关说明:我可以以某种方式将$dbpass 设置为等于加密字符串,因此它不会存储为纯文本吗?

EDIT:mysql用户当前是dashboard@192.168.%(不是localhost)

编辑 2:我认为由于 Web 服务器位于 DMZ 中,它可能正在从其公共 IP 与 MySQL 通信,但是当我将 dashboard 的主机更改为那个时,我获取Host '192.168.xx.xx' is not allowed to connect to this MySQL server。所以看来不是这样的……

【问题讨论】:

  • 您只为dashboard@localhost 定义了用户访问权限,您还需要授予用户对dashboard@phpcomputer 的访问权限,并使用这些凭据登录。
  • 嗨@Johan,感谢您的回复,但不,它没有设置为本地主机。我最初创建了用户dashboard@webserver,现在已将其更改为dashboard@192.168.%.%(这应该允许我们专用网络上的任何机器以该用户身份连接,对吧?)。
  • 检查 - 1. mysql 是否监听端口或套接字? 2. 向我们展示此用户的权限 3. 192.168.x.x 是本地网络
  • 感谢您的回复@ajreal。我弄清楚发生了什么:stackoverflow.com/questions/7354521/…
  • 顺便说一句,你错过了一个开场白 &lt;html&gt;

标签: php mysql access-denied


【解决方案1】:

密码包含一个保留字符,因此在 PHP 中需要用单引号而不是双引号括起来。

【讨论】:

  • 什么是“保留字符”?
  • 语言用于特定目的的特殊字符,例如 @ 标识数组或 # 标识哈希(在 perl 中)
【解决方案2】:

你跑了吗

GRANT ALL PRIVILEGES ON mydb.* TO 'username'@'%' 

或者只是一样,但是 @'localhost' ?

【讨论】:

  • 嗨@user410932,我试过了。看来我想通了(见我上面的回答)
猜你喜欢
  • 1970-01-01
  • 2018-02-05
  • 2018-05-19
  • 2022-11-19
  • 2013-05-13
  • 1970-01-01
  • 2019-07-05
  • 2019-03-04
  • 1970-01-01
相关资源
最近更新 更多