注册 登录
编程论坛 MySQL论坛

mysql 中报的一个错误

佳L 发布于 2014-04-18 18:31, 2903 次点击
只有本站会员才能查看附件,请 登录



之前我是将“leiyun”此设置数据库访问权限,后来我将此用户删除了,但是此用户还是可以登录,而且我删除此权限,保存时就报这个错误,请问这个问题怎么解决??我是第一次接触mysql数据库,很多东西都不懂。谢谢各位了。
11 回复
#2
tlliqi2014-04-18 18:54
不懂
摆渡的
1141:当前用户无权访问数据库
#3
韶志2014-04-18 22:25
这种东西真的搞不清。。。
曾经被有关数据库的一个小问题折腾了三天
#4
love云彩2014-04-19 11:01
你是用哪个软件管理MySQL的?
#5
love云彩2014-04-19 11:18
需求:某个用户指定ip机器能访问数据库
root@(none) 09:57:51>GRANT SELECT, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'jingwei'@'ip1,ip2' IDENTIFIED BY '*****';
Query OK, 0 rows affected, 1 warning (0.00 sec)
直接授权用逗号隔开发现warning:
root@(none) 09:57:52>show warnings\G
*************************** 1. row ***************************
Level: Warning
Code: 1285
Message: MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work
1 row in set (0.00 sec)
删掉用户重新授权遇到报错:
root@(none) 09:57:58>drop user jingwei;
ERROR 1396 (HY000): Operation DROP USER failed for 'jingwei'@'%'
root@(none) 10:07:21>show grants for jingwei;
ERROR 1141 (42000): There is no such grant defined for user 'jingwei' on host '%'
用户存在,但不是@'%' 直接drop用户会默认@'%'所以执行不成功,将mysql.user表中的user信息查询出来即可知道上面的授权语句是执行成功了写入了ip1,ip2两个ip填充了host,根据host可将该用户删除:
root@(none) 10:10:19>delete from mysql.userwhere host='ip1,ip2';
Query OK, 1 row affected (0.00 sec)
或者删除的时候用“用户@'ip1,ip2':
root@(none) 11:25:45>drop user jingwei@'ip1,ip2';
Query OK, 0 rows affected (0.00 sec)
同样的查看授权也可以用“用户@'ip1,ip2':
root@(none) 11:28:30>show grants for jingwei@'ip1,ip2';
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for jingwei@ip1,ip2 |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'jingwei'@'ip1,ip2' IDENTIFIED BY PASSWORD '****' |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
正确的授权:
GRANT SELECT, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'jingwei'@'ip1' IDENTIFIED BY '*****';
GRANT SELECT, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'jingwei'@'ip2' IDENTIFIED BY '*****';
每个ip逐一授权的好处在于要回收某台机器的权限时可方便的执行
另外一种授权方式可以在ip之间用'/'进行分割,但是在revoke权限时必须全部一起回收:
GRANT SELECT, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'jingwei'@'ip1/ip2' IDENTIFIED BY '*****';
revoke SELECT, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT ON *.* from 'jingwei'@'ip1/ip2';
建议白名单控制还是逐条执行授权!
#6
love云彩2014-04-19 11:20
特别说明一点,先自行了解一下默认用户root@%,还有root@localhost
#7
佳L2014-04-19 11:30
以下是引用love云彩在2014-4-19 11:01:15的发言:

你是用哪个软件管理MySQL的?


       用Navicat Premium来管理的。。。。。root@% 这个是让所有用户都有权限连接数据库,root@localhost是只有本地才可以连接,这个我说的对吗?
#8
love云彩2014-04-19 12:26
嗯,可以这么理解!!


另外,我想你说一下你是怎么创建用户和添加权限才导致那个问题的产生,我想知道这个过程你是如何操作的。最好能截图
#9
love云彩2014-04-19 14:01
我好有耐心的在线等待你一个多小时,看来你是太忙了,没时间回复。
只因为我实在是弄不出你那个错误,我也是用navicat premium,操作了很多遍都没有遇到那个错误。
我的步骤大概是:
1、在当前已连接到数据库的用户下新建一个用户;比如lcg;主机是localhost,然后保存
2、点击用户按钮,再点击权限管理员,为新用户lcg添加权限,此时我的设置的是允许所有的权限。
3、新建一个连接名test,用户名是lcg,主机是localhost,连接成功。
4、在test里面删除用户lcg,对应的lcg@localhost这个权限也随之被删掉,关闭test的连接,再次连接则失败。
我还试过了另外一种:
1,2,步骤同上;
3、在当前已连接到数据库的用户下删除新建的用户,随之对应的权限也会被删掉。

无论我怎么操作,也弄不出你那个错误,如果你的问题还没有解决,请描述一下你整个操作过程。
不然我不知道怎么帮你
#10
love云彩2014-04-19 14:04
另外说明一下root@%和root@localhost,和你理解的不一样,看链接吧,我不太会总结答案。
http://bbs.
#11
佳L2014-04-21 13:02
回复 9 楼 love 云彩
实在是不好意思,最近这几天没进入论坛里面,实在抱歉,让你久等了。。。。
#12
佳L2014-04-21 17:40
回复 10 楼 love 云彩
这个问题暂时不急着解决,最近我确实是很忙,可能最近的一段时间都不会到论坛中来,  到时候我再发个帖子,这个帖子我就先结了。。  非常谢谢你的帮忙,。。。。。
1