mysql“用户访问被拒绝” (仅在通过 php 连接时发生)

发布于 2024-12-03 15:58:38 字数 1409 浏览 1 评论 0原文

我创建了用户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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尸血腥色 2024-12-10 15:58:38

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

The password contained a reserved character, so in PHP it needed to be enclosed with single quotes instead of double quotes.

ヤ经典坏疍 2024-12-10 15:58:38

你运行

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

还是一样,但是@'localhost'?

did you run

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

or just the same, but @'localhost' ?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文