mysql权限级别

  MySQL 中的权限分为五个级别,分别如下:

 

1Global Level

 

  总结:

1 全局权限控制是针对整个mysql的,对所有数据库下的所有表及字段都有效

2 使用*.*指定适合范围的Global

 

Global Level 的权限控制又称为全局权限控制,所有权限信息都保存在mysql.user

中。Global Level 的所有权限都是针对整个mysqld 的,对所有的数据库下的所有表及所有

字段都有效。如果一个权限是以Global Level 来授予的,则会覆盖其他所有级别的相同权

限设置。比如我们首先给abc 用户授权可以UPDATE 指定数据库如test t 表,然后又在

全局级别REVOKE 掉了abc 用户对所有数据库的所有表的UPDATE 权限。则这时候的abc 用户将不再拥有用对test.t 表的更新权限。

 

要授予Global Level 的权限,则只需要在执行GRANT 命令的时候,用“*.*”来指定适

用范围是Global 的即可,当有多个权限需要授予的时候,也并不需要多次重复执行GRANT

命令,只需要一次将所有需要的权限名称通过逗号(“,”)分隔开即可,如下:

root@localhost : mysql 05:14:35> GRANT SELECT,UPDATE,DELETE,INSERT ON *.*

TO 'mes'@'10.86.87.180';

Query OK, 0 rows affected (0.00 sec)

 

2Database Level

 

 总结:

   1 Database LevelGlobal Level

 

Database Level 是在Global Level 之下,其他三个Level 之上的权限级别,其作用域

即为所指定整个数据库中的所有对象。与Global Level 的权限相比,Database Level 主要

少了以下几个权限:CREATE USERFILEPROCESSRELOADREPLICATION CLIENTREPLICATION

SLAVESHOW DATABASESSHUTDOWNSUPER USAGE 这几个权限,没有增加任何权限。之前我们说过Global Level 的权限会覆盖底下其他四层的相同权限,Database Level 也一样,

虽然他自己可能会被Global Level 的权限设置所覆盖,但同时他也能覆盖比他更下层的

TableColumn Routine 这三层的权限。

 

如果要授予Database Level 的权限,则可以有两种实现方式:

1、在执行GRANT 命令的时候,通过“database.*”来限定权限作用域为database 整个

数据库,如下:

第一步,分配权限,查看权限

grant alter on dms.* to 'mes'@'10.86.87.180';

mysql> show grants for 'mes'@'10.86.87.180';

 

第二步,访问dms数据库的表

 

 

 

注:经过此操作后(grant alter on dms.* to 'mes'@'10.86.87.18),用户mes能够访问数据库dms中的所有表。

 

 

2、先通过USE 命令选定需要授权的数据库,然后通过“*”来限定作用域,这样授权的

作用域实际上就是当前选定的整个数据库。

root@localhost : mysql 06:14:05> USE dms;

Database changed

root@localhost : test 06:13:10> GRANT DROP ON * TO 'mes'@'10.86.87.180';

Query OK, 0 rows affected (0.00 sec)

 

3Table Level

 

  总结:

1 Table Level是在Database Level之下

2 通过grant select on  dms.ATTACHMENTS to 'mes'@'10.86.87.180' ;方式进行分配权限

 

Database Level 之下就是Table Level 的权限了,Table Level 的权限可以被Global

Level Database Level 的权限所覆盖,同时也能覆盖Column Level Routine Level

权限。Table Level 的权限作用范围是授权语句中所指定数据库的指定表。如可以通过如下语

句给test 数据库的t1 表授权:

 

第一步,分权访问表的权限、查看权限

grant select on  dms.ATTACHMENTS to 'mes'@'10.86.87.180' ;

show grants for 'mes'@'10.86.87.180' ;

 

第二步,测试访问表权限

 

 

注:由此可知,发现进行授权后(grant select on  dms.ATTACHMENTS to 'mes'@'10.86.87.180' ;

),mes就有访问表ATTACHMENTS的权限。

 

 

Table Level 的权限由于其作用域仅限于某个特定的表,所以权限种类也比较少,仅有

ALTERCREATEDELETEDROPINDEXINSERTSELECT UPDATE 这八种权限

 

 

4Column Level

 

  总结:

      1 Column LevelTable Level之下

      2 Column Level权限仅有INSERTSELECTUPDATE三种

      3

     

 

Column Level 的权限作用范围就更小了,仅仅是某个表的指定的某个(活某些)列

由于权限的覆盖原则,Column Level 的权限同样可以被GlobalDatabaseTable 这三个

级别的权限中的相同级别所覆盖,而且由于Column Level 所针对的权限和Routine Level

的权限作用域没有重合部分,所以不会有覆盖与被覆盖的关系。针对Column Level 级别的

权限仅有INSERTSELECT UPDATE 这三种。Column Level 的权限授权语句语法基本和Table Level 差不多,只是需要在权限名称后面将需要授权的列名列表通过括号括起来,如下:

 

第一步,分配权限、查看权限

 

mysql> grant select(BANDANAID,BANDANACONTEXT) on dms.BANDANA to 'mes'@'10.86.87.180';

 

mysql> show grants for 'mes'@'10.86.87.180';

 

 

第二步,验证用户mes是否具有访问表BANDANA列的权限

 

 

注:经测试,发现用户只有访问表BANDANA分配的两个列的权限,并没有访问其他列的权限。

 

5Routine Level(常规)

 

 总结:

1 Routine Level主要只有EXECUTE ALTER ROUTINE两种权限

2 Routine Level 主要针对函数和存储过程两个对象

 

Routine Level 的权限主要只有EXECUTE ALTER ROUTINE 两种,主要针对的对象是

procedure function 这两种对象,在授予Routine Level 权限的时候,需要指定数据库

和相关对象,如:

 

root@localhost : test 04:03:26> GRANT EXECUTE ON test.p1 to

'mes'@'10.86.87.180';

Query OK, 0 rows affected (0.00 sec)

 

    了上面几类权限之外,还有一个非常特殊的权限GRANT,拥有GRANT 权限的用户可以将自身所拥有的任何权限全部授予其他任何用户,所以GRANT 权限是一个非常特殊也非常重要的权限GRANT 权限的授予方式也和其他任何权限都不太一样,通常都是通过在执行GRANT授权语句的时候在最后添加WITH GRANT OPTION 子句达到授予GRANT 权限的目的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值