mysql“用户访问被拒绝” (仅在通过 php 连接时发生)
我创建了用户dashboard
并授予它各种权限(例如SHOW DATABASES
)。我最初设置了 Host=[web-server 的私有 ip],但不断收到从 php 的 mysql_connect
返回的访问被拒绝错误,所以我设置了 Host=192.168.%
所以任何我们网络上的机器可以访问它。
我可以使用 MySQLWorkbench 从 Mac 成功连接到 Db 服务器上的 mysql Db(并成功运行 SHOW DATABASES;
),但是当我尝试通过 Web 服务器上的 php 连接时,我得到: 用户'dashboard'@'192.168.xx.xx'的访问被拒绝(使用密码: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
等于加密字符串,因此它不是以纯文本形式存储的?
编辑:mysql用户当前[电子邮件受保护].%
(不是本地主机)
编辑2:我认为由于Web服务器位于DMZ中,它可能会从其公共IP与MySQL进行通信,但是当我将dashboard
的主机更改为该值时,我得到Host '192.168.xx.xx' is not allowed to connect to this MySQL server
。所以看来事实并非如此……
I created user dashboard
and granted it various privileges (such as SHOW DATABASES
). I initially set the Host=[private ip of web-server], but kept getting access denied errors returned from php's mysql_connect
, so I set Host=192.168.%
so any machine on our network can access it.
I can successfully connect to the mysql Db on the Db server from my Mac using MySQLWorkbench (and successfully ran SHOW DATABASES;
), but when I just try to connect via php on our webserver, I just get: Access denied for user 'dashboard'@'192.168.xx.xx' (using password: YES)
the code i'm using in php is:
<!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>
Semi-related note: Can I somehow set $dbpass
equal to an encrypted string so it's not stored a plain-text?
EDIT: the mysql user is currently [email protected].%
(not localhost)
EDIT 2: I thought since the Web Server is in the DMZ, that it might be communicating with MySQL from it's public IP, but when I change the host of dashboard
to that, I get Host '192.168.xx.xx' is not allowed to connect to this MySQL server
. So it seems that is not the case…
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
密码包含保留字符,因此在 PHP 中需要用单引号而不是双引号括起来。
The password contained a reserved character, so in PHP it needed to be enclosed with single quotes instead of double quotes.
你运行
还是一样,但是@'localhost'?
did you run
or just the same, but @'localhost' ?