我真的无法弄清楚这一点。在某个用户下,我可以从机器B连接到机器A上的MySQL数据库,但我无法从机器A本地连接或从PHP连接。
为了说明,我在机器A上创建了一个db MYTEST。然后我创建了一个用户MYTEST并授予MYTEST的所有权限:
GRANT ALL PRIVILEGES ON MYTEST.* TO 'MYTEST'@'%' IDENTIFIED BY 'mypass';
FLUSH PRIVILEGES;
我以root身份做了这些,我可以从任何地方连接而没有任何问题。结果:
然后,我尝试从另一台机器连接机器B:
ubuntu@ip-*-*-2-153:~$ mysql -u MYTEST -p -h *.*.*.174
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 84
Server version: 5.5.32-0ubuntu7 (Ubuntu)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
这些都很好看。现在我回到机器A并执行此操作:
root@wangboyang:~# mysql -u MYTEST -p
Enter password:
ERROR 1045 (28000): Access denied for user 'MYTEST'@'localhost' (using password:
YES)
root@wangboyang:~#
而我能够以root身份连接:
root@wangboyang:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
最终,我需要从PHP连接。它也不起作用:
php > $con = mysqli_connect('128.199.253.174', 'MYTEST', 'mypass');
PHP Warning: mysqli_connect(): (28000/1045): Access denied for user 'MYTEST'@'w
angboyang.com' (using password: YES) in php shell code on line 1
我必须使用root:
php > $con = mysqli_connect('128.199.253.174', 'root', 'somepasswordhere');
php >
然后我尝试了一些激进的东西。我将所有全局特权授予了MYTEST,但所有结果都保持不变。请有人知道吗?真的很感激。
注意:
我确定密码正确无误。为了确认这一点,我使用了与root相同的密码,并将哈希值进行了比较。我可以使用root连接。所以密码是正确的。
两台机器都是Ubuntu 13.10。
我试图在所有这些步骤之间刷新权限并重新启动mysql服务器,但无济于事。
答案 0 :(得分:0)
我设法解决了这个问题,但我并不理解为什么。
问题似乎是通配符'%'。它应该能够替换来自任何IP域的用户连接。
但是,对于本地主机'的情况,它并不起作用。和' mydomain.com'。我的猜测是'%'仅匹配IP或在doc或配置文件中的某处指定行为。
要解决此问题,请创建用户' MYTEST' @' localhost'和' MYTEST' @' domainname.com'。