MySQL数据库权限体系入门(1)---工作原理

ORACLE等大型数据库的权限验证,一般都是XX拥有ZZ的权限,而MySQL数据库的权限验证在设计阶段就体现的有所不同,它在这中间又加了一级纬度,变成YY来的那个XX拥有ZZ的权限,如果换一个角度来描述,也可以说是:XX只有从YY连接过来,才能够访问ZZ。这样理解的话,就跟ORACLE这类数据库的身份验证机制相同了,只不过ORACLE这类数据库中,默认是不加YY这一层的(如果想加当然也可以支持),而在MYSQL中,YY成了一个必选项。

 

在本文正式开始前先描述这样一段,并不是想说MySQL有多么高级或先进,只是想表达这样一种看法,MySQL确实有所不同。Ok,接下来,跟随三思一起,进入Mysql的权限世界吧~~~~

 

一、工作原理

 

所有权限认证的根本目地,都是为了保证用户只能做允许它做的事情,MySQL也不例外,大家(范指数据库产品)实现的原理也都差不多,只不过机制上稍有差异,在权限粒度控制上有所不同。

 

MySQL数据库对权限的验证有两个层面:

 

能不能连接:主要由mysql.user,mysql.db,mysql.host三个字典表控制(事实上截止到5.1版本,Host表也基本没啥用,主要由user,db两表控制)

能不能执行操作:这个复杂一点点,除了上面三个字典表外,另外还有mysql.tables_privmysql.columns_privmysql.proc_priv三个字典表做更细粒度的控制。

 

由上可以看出,MySQL数据库主要是通过这六个字典表,来实现不同粒度的权限需求,关于这几个视图后面会有章节详细描述,这里简要介绍其处理逻辑。

 

MySQL启动时将这几个表中的内容读到内存里,当有用户连接或执行操作时,根据内存中的数据来检查用户是否有权限执行相应的操作。

 

注意,如果你读的足够认真并且大脑持续在进行思考,这会儿应该会产生这样的一个疑问:如果用户连接上数据库后,又有其它人对其权限进行了修改操作,是否会即时生效呢?这个问题的答案是:看情况!

如果是通过grantrevokeset passwordrename user等命令执行的修改,那么会马上生效,这些命令将触发系统重新载入授权表(grant tables)

如果是手动修改字典表方式(insert,update,delete),那么权限并不会马上生效,除非重启服务器,或管理用户显式的重新装载了授权表。

 

授权表被重新装载后,对当前已连接的客户端影响如下:

表或列的权限将在客户端下次执行操作时生效;

数据库的权限将在客户端执行use db_name语句时生效;

全局权限和密码修改对已连接的客户端无效,下次连接时才会生效。

 

提示:关于权限级别将在后面章节介绍!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7607759/viewspace-672261/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7607759/viewspace-672261/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值