简体   繁体   English

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

[英]mysql "access denied for user" (only happens when connecting via php)

I created user dashboard and granted it various privileges (such as SHOW DATABASES ).我创建了用户dashboard并授予它各种权限(例如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.我最初设置了 Host=[web-server 的私有 ip],但不断收到从 php 的mysql_connect返回的拒绝访问错误,所以我设置了Host=192.168.%以便我们网络上的任何机器都可以访问它。

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

the code i'm using in php is:我在 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>

Semi-related note: Can I somehow set $dbpass equal to an encrypted string so it's not stored a plain-text?半相关说明:我可以以某种方式将$dbpass设置$dbpass等于加密字符串,以便它不存储为纯文本吗?

EDIT : the mysql user is currently dashboard@192.168.% (not localhost)编辑:mysql 用户当前是dashboard@192.168.% (不是本地主机)

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 .编辑 2 :我认为由于 Web 服务器在 DMZ 中,它可能正在从它的公共 IP 与 MySQL 通信,但是当我将dashboard的主机更改为该主机时,我得到Host '192.168.xx.xx' is not allowed to connect to this MySQL server So it seems that is not the case…所以好像不是这样……

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

did you run你跑了吗

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

or just the same, but @'localhost' ?还是一样,但@'localhost'?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM