MySQL access denied for user ...

开发 开发工具
MySQL安装完成后出现最多的问题是程序无法连接到数据库「Access denied」,这里总结一下,希望可以帮助大家尽快解决问题。前提是你要连接的MySQL数据库没有ip地址、端口、防火墙设置等网路方面的问题。

MySQL安装完成后出现最多的问题是程序无法连接到数据库「Access denied」,网上的帖子很多,大多是教你如何调整配置以实现连接,然而并没有真正告诉你为什么会出现该问题,这里总结一下,希望可以帮助大家尽快解决问题。前提是你要连接的MySQL数据库没有ip地址、端口、防火墙设置等网路方面的问题。

MySQL access denied for user ...

部分开发者「本人也是其中之一,哈哈」使用root用户直接连接MySQL,强烈不推荐,因为MySQL的root用户是管理数据库用的,应用程序通过root连接数据库非常非常不安全,甚至破坏了MySQL的账户安全体系,尤其是生产环境,DBA绝对不会让你这么干的。

只要Access denied是由于账户权限问题导致的,一般推荐的***实践步骤如下,遵从这些步骤,你既可以了解到整个MySQL的账户权限体系,同时又不再可能遇到MySQL Access denied for user...这个问题。

MySQL添加数据库并配置用户和权限的***实践样例

一、以root用户身份连接到MySQL服务器,如果已为root帐户分配了密码,则还必须提供-p选项。

  1. //以root用户身份登录到MySQL服务 
  2. shell> mysql -u root -p 
  3. //与上面命令功能一致,只是默认选中了mysql这个库 
  4. shell> mysql -u root -p mysql 

二、创建一个测试数据库mytest

  1. mysql> create database mytest character set 'utf8' collate 'utf8_general_ci'; 

知识拓展:显示已有库

  1. mysql> show databases; 

三、以root身份连接到服务器,添加新帐户

  1. //创建一个主机名限制为localhost密码是mypass的jeffrey用户 
  2. mysql> create user 'jeffrey'@'localhost' identified by 'mypass'; 

帐户的主机名部分(如果省略)默认为“%”。%表示所有主机都可以通过当前的账户访问数据库。

知识拓展:对账户进行查询、修改、删除等操作

  1. //查看已有账户 
  2. mysql> select user,host from mysql.user; 
  3.  
  4. //可根据需要修改账户密码,注意区分版本 
  5. //从MySQL 5.7.6开始,使用alter user语法修改密码 
  6. mysql> alter user 'jeffrey'@'localhost' identified by 'new_password'; 
  7. //在5.7.6之前,使用set password语法修改密码 
  8. mysql> set password for 'jeffrey'@'localhost' = password('new_password'); 
  9.  
  10. //重命名账户 
  11. mysql> rename user 'jeffrey'@'localhost' to 'jeff'@'127.0.0.1'; 
  12.  
  13. //删除账户 
  14. mysql> drop user 'jeffrey'@'localhost'; 

四、对账户赋权

  1. //针对mytest库的所有操作权限分配给'jeffrey'@'localhost'账户 
  2. mysql>grant all on mytest.* to 'jeffrey'@'localhost'; 
  3.  
  4. //针对db2库的invoice对象的select权限分配给'jeffrey'@'localhost'账户,并允许该账户可继续下发权限 
  5. mysql> grant select on db2.invoice to 'jeffrey'@'localhost' with grant option; 
  6.  
  7. 知识拓展:移除、查看已经设置的权限 
  8. //移除权限 
  9. mysql> revoke all privileges on *.* from 'jeffrey'@'localhost'; 
  10. mysql> revoke select on db2.invoice from 'jeffrey'@'localhost'; 
  11.  
  12. //显示root权限 
  13. mysql> show grants for 'root'@'localhost'; 
  14.  
  15. //要显示授予您用于连接到服务器的帐户的权限,可以使用以下任何语句: 
  16. mysql> show grants; 
  17. mysql> show grants for current_user; 
  18. mysql> show grants for current_user(); 

五、刷新权限,立即生效

  1. mysql> flush privileges; 

六、连接测试

  1. //这里给出jdbc连接mysql的字符串,方便验证 
  2. jdbc:mysql://ip:3306/mytest?useUnicode=true&characterEncoding=utf8 

总结

通过上面的操作步骤,相信您已经对整个MySQL的账户权限管理体系有个很清楚的认识,如果出现MySQL Access denied for user...问题只需要按照上面的步骤排查一下即可***解决。

之所以,这么多的开发者遇到MySQL Access denied for user...问题,主要的原因有三:一是因为直接使用root连接,默认root只能本地连接,远程连接自然失败;二是因为账户与权限设置不正确;三是根本不了解MySQL账户权限管理的一般步骤「大部分属于这种情况」。

【本文为51CTO专栏作者“朱国立”的原创稿件,转载请通过作者微信公众号“开发者圆桌”获取联系和授权】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2010-11-23 13:36:29

Mysql User表

2010-10-08 10:27:30

Mysql User表

2011-04-08 10:43:08

mysql数据access数据库

2024-03-04 09:58:39

​​:valid​​​​:invalidCSS

2010-05-19 15:12:32

导入MySQL

2010-05-19 15:01:14

MySQL数据导入

2009-07-08 17:04:25

user cache

2011-03-21 10:35:10

2010-05-17 10:11:11

导入Mysql

2011-08-24 13:43:09

CREATE USER中文man

2010-06-09 14:19:35

导入MySQL数据库

2012-09-26 14:51:15

虚拟化

2011-08-11 15:03:21

ACCESS中文man

2011-03-24 16:12:55

Access

2011-08-24 14:59:50

drop_user中文man

2011-07-20 14:31:56

XCode User Scrip 脚本

2011-08-24 09:51:53

alter_user中文man

2012-03-30 14:39:30

DataNucleusJava

2011-04-08 11:13:10

2015-02-11 16:02:04

微信SDK
点赞
收藏

51CTO技术栈公众号