6

在过去的几个小时里,我一直用力将它撞在墙上,我的头都在流血。:(

正如标题所示,我创建了一个 MySQL 用户,可以从数据库服务器上的mysql命令提示符访问数据库。但是,当我尝试实例化一个新的 PDO 对象以使用同一用户访问数据库时,我得到:

SQLSTATE[42000] [1044] Access denied for user 'bob'@'localhost' to database 'my_database'

这是我创建用户的方式:

GRANT SELECT, DELETE, EXECUTE, INSERT, UPDATE ON my_database.* TO 'bob'@'localhost' IDENTIFIED BY 'some_password';

这里可能有什么问题?!请有人给我一块骨头!(仅供参考,当我尝试创建一个新的 PDO 对象时会出现问题......我捕获了一个 PDOException ,这就是消息)。

我在授予后执行了 FLUSH PRIVILEGES,这是 SHOW GRANTS 的输出:

mysql> SHOW GRANTS FOR 'bob'@'localhost';
+------------------------------------------------------------------------------------------------------------+
| Grants for bob@localhost                                                                                   |
+------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'bob'@'localhost' IDENTIFIED BY PASSWORD '.........................................' |
| GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `my_database`.* TO 'bob'@'localhost'                      |
+------------------------------------------------------------------------------------------------------------+

这是这个用户的 mysql.db 的样子:

mysql> SELECT * FROM db WHERE User = 'bob'\G;
*************************** 1. row ***************************
                 Host: localhost
                   Db: my_database
                 User: bob
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: N
            Drop_priv: N
           Grant_priv: N
      References_priv: N
           Index_priv: N
           Alter_priv: N
Create_tmp_table_priv: N
     Lock_tables_priv: N
     Create_view_priv: N
       Show_view_priv: N
  Create_routine_priv: N
   Alter_routine_priv: N
         Execute_priv: Y
           Event_priv: N
         Trigger_priv: N

如果重要的话,这是一个在 Ubuntu 12.04 LTS 上运行的四节点 MySQL 集群。

编辑:我发现只有当我尝试使用 Zend AMF 访问服务器时才会出现问题。任何想法为什么 PDO 不能与 Zend AMF 一起使用?我可能错过了 Zend AMF 设置中的某些内容吗?

4

2 回答 2

5

改用'bob'@'127.0.0.1'。如果 php 通过 127.0.0.1 访问它,它永远不会被称为“localhost”,因为本地 DNS 解析没有发生,并且 MySQL 将拒绝访问它。

于 2012-10-12T08:12:29.490 回答
3

对于未来的谷歌人,我刚才也遇到了同样的问题,我很确定密码是正确的。是的,密码确实是正确的,但问题是我如何生成密码以及如何将密码保存在配置文件中。

如果您使用像我这样的随机密码生成器,请确保您的密码中没有$美元符号。

如果您有$密码,请确保使用这样的单引号将密码保存在配置文件中

$pass = 'randomchars$morerandom';

但不是这样的双引号

$pass = "randomchars$morerandom";
于 2015-02-01T18:39:45.207 回答