《MYSQL性能调优与架构设计》第四章--mysql权限系统介绍

由于这本书的第二章后面部分和第三章讲的是理论部分,也只是翻看了一下,没有细作笔记。而第四章,则是MYSQL服务器管理中的一个重点。

mysql的相关权限信息主要存储在几个被称为 grant tables 的系统表中,即:mysql.User、mysql.db、mysql.Host、mysql.table_priv 和 mysql.column_priv。由于权限信息数据量比较小,访问有非常频繁,MYSQL在启动的时候,就会将所有的权限信息都加载到内存中,并保存在几个特定的结构里。

所以每次手工修改了相关权限表后,都需要执行 “FLUSH PRIVILEGES”,通知MYSQL重新加载MYSQL权限信息。

不过,如果是通过GRANT、REVOKE 或者DROP USER 命令来修改相关权限,则不需要手工执行 FLUSH PREVILEGES 命令,因为通过这几个命令所做的权限调整,在修改系统表的同事也会更新内存结构中的权限信息。

建议尽量使用GRANT、REVOKE、DROP USER、CREATE USER这几个命令来进行用户和权限的变更操作,尽量减少直接修改grant tables 来实现用户和权限的变更。

 要为某个用户授权,可以使用GRANT命令,要去除某个用户的权限则使用REVOKE命令。

MYSQL的权限分为5个级别,分别如下。

1.Global Level

全局权限控制,如果一个权限是Global Level授予的,则会覆盖其他所以级别的相同权限设置,要授予Global Level 权限,只需在执行GRANT命令时,用“ *.* ”指定适用范围是Global Level即可。

2. Database Level

其作用域即为指定整个数据库中的所有对象,有两种方式授予Database Level权限。

(1)当执行GRANT命令时,通过“ database.* ”来限定权限作用域为database整个数据库。如:

GRANT ALTER ON test.* TO 'def'@'localhost';

(2)先通过USE命令选定要授权的数据库,然后通过“ * ”来限定作用域,这样授权的作用域实际上就是当前选定的整个数据库。如:

USE test;

GRANT DROP ON * TO 'def'@'localhost';

3.Table Level

作用范围是授权语句中指定数据库的指定表,如:

GRANT INDEX ON test.t1 TO 'abc'@'localhost';

4.Column Level

作用范围是指定数据库中具体列,授权方式如下:

GRANT SELECT(id, value) ON test.t1 TO 'abc'@'localhost';

其中id,value是指定的授权列名

5.Routine Level

目前只有EXCUTE和ALTER ROUTINE 两种,针对的对象主要是procedure 和 function,当授予权限时,必须指定数据库和相关对象。

 

 

在以上5个Level的权限当中,Table、Column、和Routine 三者在授权中所以来的对象必须是已经存在的,不想Database Level,可以再当前不存在改数据库的时候就完成授权。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值