MySQL Access denied for user 'root'@'localhost'
来源:互联网 发布:淘宝卖虚拟物品流程 编辑:程序博客网 时间:2024/05/16 12:08
#MySQL Access denied for user ‘root’@’localhost’
问题起因:
执行命令
CREATE USER goodboy IDENTIFIED BY 'goodboy';GRANT ALL privileges ON *.* TO 'goodboy'@'%' identified by 'goodboy' WITH GRANT OPTION;flush privileges;
第二句将所有数据库的权限赋予goodboy用户时出现错误
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
最终的解决办法是把
GRANT ALL privileges ON *.* TO 'goodboy'@'%' identified by 'goodboy' WITH GRANT OPTION;中的*.*替换成gooddb(数据库).*GRANT ALL privileges ON gooddb.* TO 'goodboy'@'%' identified by 'goodboy' WITH GRANT OPTION;
意思就是,前面一句是把所有库的所有表的权限都赋予goodboy用户,但是root@localhost说:“你丫的谁啊?凭什么动我的奶酪!”我理解的就是一些库比如mysql里面保存有用户名和密码,只有root用户有权限更改,所以这些库的权限不能给别人,哪怕你是我root创建的用户。
数据库gooddb是在root用户创建,可以把权限给goodboy用户,所以第二句命令执行成功了。
问题虽然解决,但中间的过程非常曲折。
首先试着将root用户的host改为%
update user set host='%' where user='root';
这时候
show grants;或者show grants for root@'localhost';
会执行失败。
然后我又增加了一个root用户,host=localhost,和root@%的密码一样,flush privileges后退出重新root用户登录,发现只可见两个数据库,mysql等库不见了。应该是用户权限导致的问题。这时我就没办法再修改mysql这个库里的user表里的用户信息,采用以下步骤:
# /etc/init.d/mysql stop# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &# mysql -u root mysqlmysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';mysql> FLUSH PRIVILEGES;mysql> quit# /etc/init.d/mysql restart# mysql -uroot -pEnter password: <输入新设的密码newpassword>
中间的update操作直接换成删除;
Delete FROM user where Host='localhost' and user='root';
或者直接删干净,增加一个用户
INSERT INTO `user` VALUES ('%','root','root123','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
多少个参数看user这个表的表结构,或者直接用:
insert into mysql.user(Host,User,Password) values("localhost","root",password("root123"));
最后一定要记住flush privileges后再退出。我是直接
INSERT INTO `user` VALUES ('%','goodboy','goodboy','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
增加一个用户goodboy,再GRANT ALL privileges,依然还是同样的问题。最后偶然之下改了
*.*为gooddb.*
才解决问题。之所以出现问题是在root创建一个用户A时,同时创建了数据库DB,想把DB的权限付给A时,让用户A可以访问到DB这个数据库,却意外将所有数据库和表的权限给A,这是不允许的。建议规范使用,在创建用户之后退出,以新用户登录创建数据库和表,避免相同的问题。
其他方面,在load data infile时出现错误
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
问题原因是当前的目录不能作为数据加载的目录,
show variables like '%secure%';+--------------------------+-----------------------+| Variable_name | Value |+--------------------------+-----------------------+| require_secure_transport | OFF || secure_auth | ON || secure_file_priv | /var/lib/mysql-files/ |+--------------------------+-----------------------+
可以看到允许的目录是/var/lib/mysql-files/,当把文件cp到这个目录下再试,出现了文件not found的问题(Are U f**king kidding me?!),原因是文件权限的问题
chmod 777 /var/lib/mysql-files/filename.txt
执行后成功!
我在另一个版本的mysql创建了三个用户:
INSERT INTO `user` VALUES ('%','goodboy','goodboy','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
创建了用户
root@%
user1@localhost
user1@%
奇怪的是他们在mysql.user的表中的密码没有变成加密的密文,这时出现的问题是我在用user1进行登录的时候,mysql -u user1 -p输入密码,登录被user1@localhost拒绝了,去掉-p后可以正常访问….用user1加载数据进入数据库的时候也被拒绝。
当我用root进行登录后,执行:
GRANT ALL privileges ON *.* TO 'user1'@'%' identified by 'user1' WITH GRANT OPTION;
mysql.user中的三个用户的密码变成了密文,刚才的问题也解决了。
然而,这里执行的是
*.*
就是本页说的第一个问题(what f*ck).如有知晓原因,还请留言!
- mysql Access denied for user 'root'@'localhost'
- MySQL Access denied for user 'root'@'localhost'
- mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'
- 解决mysql“Access denied for user 'root'@'localhost'”
- 解决mysql“Access denied for user 'root'@'localhost'”
- 解决mysql“Access denied for user 'root'@'localhost'
- 解决mysql“Access denied for user 'root'@'localhost'”
- 解决mysql“Access denied for user 'root'@'localhost'”
- 解决mysql“Access denied for user 'root'@'localhost'”
- 解决mysql“Access denied for user 'root'@'localhost'”
- MySQL Error 1045(28000) Access Denied for user 'root'@'localhost'
- 连接mysql提示Access denied for user 'root'@'localhost'
- 解决mysql“Access denied for user 'root'@'localhost'”
- 解决mysql“Access denied for user 'root'@'localhost'”
- MySQL 'Access denied for user 'root'@'localhost' 的问题
- 解决mysql“Access denied for user 'root'@'localhost'”
- 解决mysql“Access denied for user 'root'@'localhost'”
- 解决mysql“Access denied for user 'root'@'localhost'”
- firewall杂记
- 百度地图在浏览器上仿照APP获取位置路线平移
- LeetCode 69. Sqrt(x)
- linux下使用supervisor
- 关于数据挖掘学习计划
- MySQL Access denied for user 'root'@'localhost'
- 1417 最小乘车费用(busses)(codevs)
- docker java web应用
- 大话数据结构6 - 查找
- JAVA程序员成长之路的总结
- PAT 1043 输出PATest(二)
- Spring 之SPEL表达式
- 【HDU1848】Fibonacci again and again (博弈论)
- 算法笔记_019-背包问题(Java)