我创建了一个名为database_test
&的数据库。我有一个名为john
的用户和一个密码hello123
。这全部来自主持人HOST
。
<?php
// Create connection
$host = "HOST"; // THIS HOST IS CORRECT. I'M JUST HIDING IT FROM GENERAL PUBLIC.
$user = "john";
$password = "hello123";
$database = "database_test";
$con=mysqli_connect($host,$user,$password,$database);
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>
然而,我收到错误:
无法连接到MySQL:用户'john'@'HOST'拒绝访问 (使用密码:是)
我已经为用户“john”设置了权限,如下所示......
为什么我收到此错误?我有正确的主机,用户名和密码正确,但它说这个用户没有权限
答案 0 :(得分:0)
主机名是localhost
还是127.0.0.1
以外的其他名称?如果是这样,那么这就是防火墙问题。
要检查主机是否可远程访问,您可以使用mmap
。 nmap
是一个常见的网络实用程序,默认情况下不安装在Linux计算机或Mac OS X计算机上,但可以轻松安装和安装。从命令行运行。
只需从要用于连接远程主机的代码的服务器运行nmap
,如下所示:
nmap [hostname or IP address] -p 3306
端口3306
是MySQL端口,如果该端口打开,则输出为:
Starting Nmap 5.21 ( http://nmap.org ) at 2014-05-16 18:56 EDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00013s latency).
PORT STATE SERVICE
3306/tcp open mysql
Nmap done: 1 IP address (1 host up) scanned in 0.40 seconds
但如果关闭,那就是:
Starting Nmap 6.25 ( http://nmap.org ) at 2014-05-16 18:57 EDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000096s latency).
PORT STATE SERVICE
3306/tcp closed mysql
Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds
此外,您可以通过运行此命令来检查MySQL数据库服务器本身的GRANTS
用户john
:
SHOW GRANTS FOR 'john'@'127.0.0.1';
或者使用localhost
代替IP地址;
SHOW GRANTS FOR 'john'@'localhost';
虽然您的屏幕截图显示您已授予权限,但您需要确保它们确实已获得权限。在MySQL中,您可以通过设置GRANT
然后运行FLUSH PRIVILEGES;
过去,我所看到的是一些MySQL设置不认为127.0.0.1
和localhost
是相同的,即使它们是相同的。因此,我建议您将主机名更改为127.0.0.1
或localhost
,看看会发生什么。
答案 1 :(得分:-1)
您需要从主机向用户添加权限:HOST,执行这些查询:
GRANT USAGE ON database_test.* TO 'john'@'HOST' IDENTIIFIED BY 'hello123';
GRANT ALL PRIVILEGES ON database_test.* TO 'john'@'HOST' IDENTIFIED BY 'hello123';
FLUSH PRIVILEGES;
PS:我授予了所有权限,因为您的帖子显示john可以拥有所有权限,否则您可以根据需要逐个添加权限。