SQLSTATE[28000] [1045] Access denied for user 'XXXXX'@'localhost' (using password: YES)
我在phpMyAdmin中使用适当的权限创建了此用户。
我已阅读MySQL ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)并有疑问:
1)如果我有一个用户名,但密码不同,或者它会给我一个不同的错误(不管怎么说错误是相同的),错误信息是否相同,但需要确定。
2)这个问题可能与硬盘空间太小有关吗?
3)GRANT ALL PRIVILEGES ON
XXXXXXX _%.* TO 'XXXXXXX'@'localhost'WITH GRANT OPTION;
我运行了这个查询,这个用户有完整的权限:
REVOKE ALL PRIVILEGES ON `XXXXXXX_%` . * FROM 'XXXXXXX'@'localhost';
REVOKE GRANT OPTION ON `XXXXXXX_%` . * FROM 'XXXXXXX'@'localhost';
GRANT ALL PRIVILEGES ON `XXXXXXX_%` . * TO 'XXXXXXX'@'localhost';
这是正确的做法吗?
4)我可以访问app / etc / local.xml文件,如果有的话,我应该检查一下,看看我是否在正确的轨道上?我看到那里的用户名被恰当地列出但是...... 我似乎无法在phpMyAdmin中的任何地方找到对dbname的livedb的引用,我在哪里看?
<connection>
<host><![CDATA[localhost]]></host>
<username><![CDATA[XXXXXXX]]></username>
<password><![CDATA[XXXXXXXXXX]]></password>
<dbname><![CDATA[XXXXX_livedb]]></dbname>
<initStatements><![CDATA[SET NAMES utf8]]></initStatements>
<model><![CDATA[mysql4]]></model>
<type><![CDATA[pdo_mysql]]></type>
<pdoType><![CDATA[]]></pdoType>
答案 0 :(得分:0)
我首先要比较用户的密码。
SELECT * FROM mysql.user WHERE User = 'XXXXX' AND Host = 'localhost' ;
确保该行存在,plugin
列显示mysql_native_password
,password_expired
显示N
。
如果所有这些都没问题,那么比较密码值。要获取要比较的哈希值,您可以运行:
SELECT PASSWORD('mysecret')
然后将返回值与Password
表中行的mysql.user
列中存储的值进行比较。如果哈希值相同,则'mysecret'是该用户的有效密码。
如果mysql.user
表中不存在该特定行,请注意localhost(''@localhost
)上的匿名用户优先于XXXXX@'%'
帐户。 (这对于那些没有经验的人来说有点混乱。)
在MySQL中,用户由两件事标识:User
和Host
。当您登录MySQL时,MySQL服务器具有特定的顺序,它在mysql.user
表中查找匹配的行。首先,它在用户和主机上查找完全匹配...
User='XXXXX' Host='localhost'
如果找到,那就是用户......它将检查密码(或任何认证机制,以查看是否允许连接。)如果未找到匹配,则MySQL服务器检查匿名用户
User='' Host='localhost'
如果在那里找不到匹配,那么它将检查:
User='XXXXX' Host='%'