MySQL权限更改何时生效

偶然在一次实验中发现MySQL权限分配何时生效的问题,当在同一台电脑(服务器)上,我用的只是一台普通PC,创建的一个普通用户user1,除测试表test1的select以外无其他权限
create user user1@localhost;

grant select on test1.* to user1@localhost;


同时用root和user1连接MySQL,如不想用图形化可在cmd命令行执行
mysql -u user1 - p test1

然后在user1用户下对某张表进行insert的操作(注意user1一直处于连接状态)
insert into test1 values('aa');
执行结果是user1无相应的权限,执行不成功

在root下为user1授权
grant insert on test1.* to user1@localhost;
flush privileges;

在user1下再次对表test1进行insert操作
这时发现,居然还是提示未有相应权限!!
然后我们user1用户退出登录后再重新登录上去,这时发现,可以作insert操作了.

因为第一次写帖还不是很熟悉发图发代码的操作,所以有兴趣的朋友可以亲自做一下我上面说的这个小测试.
下面引用一下MySQL5.1 参考手册里的一段话:

5.7.7. 权限更改何时生效
当mysqld启动时,所有授权表的内容被读进内存并且从此时生效。
当服务器注意到授权表被改变了时,现存的客户端连接有如下影响: 
表和列权限在客户端的下一次请求时生效。 
数据库权限改变在下一个USE db_name命令生效。 
·         全局权限的改变和密码改变在下一次客户端连接时生效。
如果用GRANT、REVOKE或SET PASSWORD对授权表进行修改,服务器会注意到并立即重新将授权表载入内存。

如果你手动地修改授权表(使用INSERT、UPDATE或DELETE等等),你应该执行mysqladmin flush-privileges或mysqladmin reload告诉服务器再装载授权表,否则你的更改将不会生效,除非你重启服务器。

如果你直接更改了授权表但忘记重载,重启服务器后你的更改方生效。这样可能让你迷惑为什么你的更改没有什么变化!


仔细读了一下才发现,结论很简单:
当操作对象为 *.*或xx.*(属于全局权限)时,要在下一次客户端连接时才生效,
当操作对象为xx.xx时,就能做到实时更新了,
仅从这点看来,MySQL的安全性并没有做得太好,
也不知道MySQL出于什么考虑做出了这样的设计.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值