15.连接mysql报错ERROR 1045 (28000) Access denied for user (using password YES)

2016.10.14 今天程序员节啊


1.问题描述


之前做项目一直用的root用户进行的mysql数据库操作,觉得不安全,今天新建了个用户darry,打算将项目使用的用户换成darry


但是新建用户之后,使用命令 mysql -udarry -ppassword 连接数据库时报错


ERROR 1045 (28000) Access denied for user 'darry'@'localhost' (using password YES)




2.解决过程


网上查询一番发现这个错误一般有以下几个原因


1).用户是否存在

2).是否输入了密码(不输入密码一般后面为using password NO)

3).用户存在但未设置密码

4).未对当前登录IP进行连接授权


我创建用户时设置了密码,所以可以排除前三个原因。

对用户授权时使用的命令是

GRANT ALL ON dbname.* TO darry@'%';


'%'的含义为所有IP均可进行连接,所以也不应该有这个问题啊

然后翻墙google,在


http://stackoverflow.com/questions/10299148/mysql-error-1045-28000-access-denied-for-user-billlocalhost-using-passw


得到一点启发,(其实原因和解决办法已经写得很清楚了,但是英文不好只看懂点大概没有彻底理解)

大致原因是在本地登录时匹配的用户是 darry@'localhost'


而darry@'%';意为匹配所有IP地址,但在本地连接时却匹配不到,所以本地连接时报错没有权限。

于是创建一个新用户darry@'localhost' 并授于相应权限,

GRANT ALL ON dbname.* TO darry@'localhost' IDENTIFIED BY 'password';

刷新权限(或重启Mysql) flush privileges;

再次使用 mysql -udarry -ppassword 进行登录发现成功进入。


但是如果只有darry@'localhost'这个用户意味着这个用户只能从本地进行连接,无法远程连接,

如果只有darry@'%';这个用户则意味着这个用户只能从远程连接,无法从本地连接。

所以如果本地连接和远程连接都需要的话则需要创建者两个用户。


因为之前用的root用户既有本地连接也有远程连接的操作,所以使用 select user,host from mysql.user 进行查询发现果然存在两个root用户,即

root@'localhost';  和  root@'%'; 




3.总结


刚开始使用的xshell终端工具连接的服务器,然后操作的mysql数据库,以为这是对数据库的远程连接,觉得darry@'%'不应该没有权限的。

后来使用其他几个也是 user@'%';的用户进行连接也是这个错误,

忽然意识到我只是远程连接的服务器,但是在服务器上连接数据库应该是本地连接,所以尝试用 user@'localhost';用户进行连接发现成功。

原来是我混淆了本地连接和远程连接的概念,

在服务器上对服务器上的mysql进行操作是本地连接,所以服务器上的项目中的文件在进行数据库的增删改查时都是通过的本地连接

远程连接一般是在其他机器上直接连接本机的服务器,比如通过其他机器的终端,或者Navicat等数据库工具。
 
当你在尝试使用root用户登录MySQL时,如果出现“ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)”这个错误,这通常意味着你输入的密码不正确或者root用户没有被授权从本地主机登录MySQL。以下是一些可能的解决方法: 1. 确认你输入的密码是否正确。如果你不确定密码是否正确,可以尝试重置密码。 2. 确认root用户是否被授权从本地主机登录MySQL。你可以通过以下命令检查: ```mysql SELECT user,authentication_string,plugin,host FROM mysql.user; ``` 如果root用户的Host列不是“localhost”,那么它可能没有被授权从本地主机登录MySQL。你可以使用以下命令为root用户添加本地登录权限: ```mysql GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; ``` 注意:这里的“password”应该替换为你想要设置的密码。 3. 如果你仍然无法登录MySQL,你可以尝试重置root用户的密码。以下是一些可能的方法: - 如果你有root用户的sudo权限,你可以使用以下命令重置密码: ```shell sudo mysql_secure_installation ``` 然后按照提示操作即可。 - 如果你没有root用户的sudo权限,你可以尝试使用以下命令重置密码: ```shell sudo /etc/init.d/mysql stop sudo mysqld_safe --skip-grant-tables & mysql -u root use mysql; update user set authentication_string=password('new-password') where user='root'; flush privileges; quit; sudo /etc/init.d/mysql start ``` 注意:这里的“new-password”应该替换为你想要设置的新密码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值