mysql5.1.73bug_mysql5.1 系列 关于用户授权的一个bug

不知道我这文章名字这样写是否精确,但是我在5.1.37 和 5.1.60 两个版本上碰到了这样的问题。

以前网站链接数据库的用户权限是 grant all on *.* to user identified by 'password'

后来感觉这样的权限太大,想修改为只能从特定主机访问特定库,于是执行

revoke all on *.* from user;

然后重新赋权限:revoke all on ledb.* from user@192.168.100.10;

之后flush privileges;

然后到192.168.100.10机器上登陆mysql,执行mysql -uuser -h192.168.100.11 -p

注:192.168.100.11是mysql服务器ip

登陆成功,但是无法执行任何操作,例如执行show databases;

会提示如下报错:

mysql> show databases;

ERROR 2006 (HY000): MySQL server has gone away

No connection. Trying to reconnect...

Connection id:  197738

Current database: *** NONE ***

ERROR 2013 (HY000): Lost connection to MySQL server during query

查看mysql服务器错误日志,有如下报错:

131120 11:28:01 [Warning] Aborted connection 5058 to db: 'unconnected' user: '7cacti5' host: 'localhost' (init_connect command failed)

后来尝试了:删除用户,在重新授权,也不行。

最后 查询错误日志里的错误提示(init_connect command failed),总算在mysql官网找到了答案,原来这是一个bug。官网上给出了修复方法,在此贴出,希望能帮到别人。How to repeat:

mysql -uroot -P5137

-------------

DROP USER 'roel'@'localhost';

DROP PROCEDURE IF EXISTS LOGINUSER;

CREATE USER 'roel'@'localhost';

GRANT SELECT ON *.* TO 'roel'@'localhost';

DELIMITER //

CREATE PROCEDURE LOGINUSER()

BEGIN

SELECT USER(),CURRENT_USER();

SELECT CONCAT(CURRENT_DATE(),' ',CURRENT_TIME());

END;

//

DELIMITER ;

SET @@global.init_connect='CALL LOGINUSER();';

SET @@global.init_connect='';

Query OK, 0 rows affected (0.00 sec)

然后,重新给用户授权即可解决问题。

虽然问题搞定了,但是还不是很清楚原理,看修复过程,应该是掉用init_connect这个命令的时候出错,然后重建了这个命令或功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值