SQLSTATE [28000] [1045]

时间:2016-06-06 19:20:33

标签: mysql sql

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>

1 个答案:

答案 0 :(得分:0)

我首先要比较用户的密码。

SELECT * FROM mysql.user WHERE User = 'XXXXX' AND Host = 'localhost' ;

确保该行存在,plugin列显示mysql_native_passwordpassword_expired显示N

如果所有这些都没问题,那么比较密码值。要获取要比较的哈希值,您可以运行:

 SELECT PASSWORD('mysecret')

然后将返回值与Password表中行的mysql.user列中存储的值进行比较。如果哈希值相同,则'mysecret'是该用户的有效密码。

如果mysql.user表中不存在该特定行,请注意localhost(''@localhost)上的匿名用户优先于XXXXX@'%'帐户。 (这对于那些没有经验的人来说有点混乱。)

在MySQL中,用户由两件事标识:UserHost。当您登录MySQL时,MySQL服务器具有特定的顺序,它在mysql.user表中查找匹配的行。首先,它在用户和主机上查找完全匹配...

User='XXXXX' Host='localhost'

如果找到,那就是用户......它将检查密码(或任何认证机制,以查看是否允许连接。)如果未找到匹配,则MySQL服务器检查匿名用户

User='' Host='localhost'

如果在那里找不到匹配,那么它将检查:

User='XXXXX' Host='%'