Tables_priv表与columns_priv表

数据库
Tables_priv表与columns_priv表是属于授权表的,他们可以起到数据库访问控制的作用,Tables_priv表和columns_priv表是经过更为细致的分析得出来的,所以具有很高的精密性。

授权表之前已经为大家介绍过了,想了解点击进入MySQL授权表概述和MySQL服务器的访问控制,本文将为大家介绍两个授权表,即Tables_priv表与columns_priv表。

Tables_priv表与columns_priv表

  在上面介绍的五种授权表中,tables_priv和columns_priv是后来加入进来的,它们的主要目的是提供细粒度的用户控制。这两个表与授权表db非常类似,但是其控制的范围更加细致,即特定数据库中的特定的表。前面说过,超级用户可以通过授权表db来限制用户在一个数据库中的行为,有了这两个授权表,超级用户可以进一步控制用户针对每个表和每个字段的动作。所以,这给超级用户提供了更加灵活的控制选项。

在深入学习对数据表的访问控制之前,首先让我们了解一下下列特性:

通配符可以用于这两个表的host字段,但是不允许在Db、Table_name和Column_name字段使用通配符。
权限字段被声明为SET字段。
tables_priv和columns_priv表只应当通过GRANT/REVOKE命令进行修改。通过INSERT命令向这两个表插入数据会导致服务器不稳定!
tables_priv表中的table_priv字段可以允许下列命令:Select、Insert、Update、Delete、Create、Drop、Grant、References、Index和Alter。
tables_priv表中的column_priv字段允许下列命令:Select、Insert、Update和References。
columns_priv表中的type字段允许下列命令:Select、Insert、Update和References。
授权表tables_priv

下列是一个tables_priv表的示意图:

下面简要介绍各字段的含义

Host——适用于那些主机?
Db——适用于从上面的主机所连接的哪些数据库?
User——适用于来自上述主机的哪些用户?
Table_name——适用于上述数据库中的哪些表?
Table_priv——为这个表赋予哪些权限?
Column_priv——为这个表中的个字段赋予哪些权限?
Timestamp——这个权限是何时赋予的?
Grantor——谁授与该用户的这个权限?
 

#p#

要想真正弄懂tables_priv表,最好的办法就是通过实例进行学习,下面我们就给出一些例子。

例1:

%>GRANT SELECT ON italy TO wj@314interactive.com;
这条命令的作用是什么?以上命令允许来自主机314interactive.com的用户wj在表italy上至下一个SELECT语句。请记住,只有当给定数据库/主机和用户名对应的db或者host表中的SELECT字段的值为N时,才需要访问这个表。如果给定数据库/主机和用户名对应的db或者host表中的SELECT字段中有一个值为Y的话,那么就无需控制该tables_priv表。

例2

%>GRANT SELECT, INSERT ON oats.italy TO wj@314interactive.com;
这条命令的作用是什么?以上命令允许来自主机314interactive.com的用户wj对数据库oats中的数据表italy执行SELECT和INSERT语句。

例3:

%>REVOKE SELECT on oats.italy from wj@314interactive.com
这条命令的作用是什么?以上命令撤消来自主机314interactive.com的用户wj对数据库oats中的表italy的执行SELECT的权限。

重要的是要认识到,包含在tables_priv中的信息仅当host/db表不允许用户执行要求的功能所需的权限时才生效。如果给定的权限在host/db表中为Y,那么就无需考察tables_priv表。

例4:

%>GRANT SELECT(id,name,address,phone),update(address,phone) ON
company.customers TO gilmore@314interactive.com;
这条命令的作用是什么?以上命令将授予对company数据库中customers表内id、name、address和phone字段执行SELECT的权限,以及对address和phone字段执行UPDATE的权限。

这将带来哪些影响?这条命令会修改tables_priv表和columns_priv表,这是因为它引用这两个表和表内特定的字段。

例5:

%>REVOKE UPDATE(address,phone) ON company.customers FROM gilmore@314interactive.com;
这条命令的作用是什么?这个命令将撤消对company数据库中customers表内的address和phone字段执行UPDATE操作的权限。

这将带来哪些影响?因为该命令直接涉及给定表中的某些字段,所以columns_priv表以及tables_priv表也会更新。

前面说过,只有在必须的情况下才会使用授权表,举例来说,如果高优先级的表提供了适当的权限的话,那么就无需查阅优先级较低的授权表了。如果高优先级的表中对应命令的值为N,那么就需要进一步查看低优先级的授权表。

小结:本文先是具体的介绍了Tables_priv表与columns_priv表着两个授权表,让大家对他们有个大概的了解,然后又用举例子的方法,通过五个例子来讲解,更容易理解及接受,希望对大家有所帮助。

【编辑推荐】

  1. PSQL VS MySQL 如何选择开源数据库
  2. 降低锁竞争 减少MySQL用户等待时间
  3. 安全配置MySQL数据库有妙招
责任编辑:迎迎 来源: IT168网站
相关推荐

2015-11-03 10:36:49

黑莓盈利手机

2022-09-21 08:03:45

MySQLtable表结构

2010-07-22 16:02:29

2021-01-04 08:24:44

Class字段表方法表

2023-06-27 08:28:40

MySQLInnoDB

2021-07-14 10:38:29

MySQL共享表独立表

2009-12-11 09:27:16

静态路由表动态路由表

2021-04-19 08:16:38

Hive数据类型大数据技术

2020-02-14 18:10:40

MySQL索引数据库

2009-06-24 10:26:41

Oracle约束分区表

2020-07-28 09:04:09

NewSQL分库分表

2019-07-11 10:44:23

Oracle表空间数据库

2021-09-06 07:58:48

分库数据库分表

2010-11-11 09:20:46

SQL Server创

2023-02-08 07:52:36

跳跃表数据结构

2010-11-29 13:22:45

sybase数据表

2017-08-31 09:45:43

JavaArrayList数据

2010-05-21 10:14:10

MySQL更改表结构

2023-11-06 06:43:23

单链表查询数据结构

2012-02-23 10:28:12

MySQL
点赞
收藏

51CTO技术栈公众号