三、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——谁授与该用户的这个权限?