(一)MySQL有哪些权限
MySQL的权限列表可以使用 show privileges 来查看,主要的权限信息如下:
这里我们根据作用域,把权限分为3类:
1.MySQL服务管理权限:用于管理MySQL服务器的操作。这些权限是全局性的,授权范围不能是特定的数据库或对象。只能使用*.*方式授予,不能使用db.*或db.tb方式授权;
2.数据库级别权限:授权范围可以是所有数据库,也可以是单个数据库下面的所有对象。可以使用*.*方式授予全部数据库,也可以使用db.*授予单个数据库;
3.对象级别权限:授权范围可以是所有数据库,也可以是单个数据库下面的所有对象,也可以是特定的对象。可以使用*.*方式授予全部数据库,也可以使用db.*授予单个数据库,还可以使用db.tb授予单个对象。
(二)MySQL权限管理相关表
在mysql数据库中包含了权限相关的表,一共6个表,分别从不同维度记录了MySQL用户的权限信息
user :用户账号,全局权限和其它非权限列
db :数据库级别权限
tables_priv :表级别权限
column_priv :列级别权限
procs_priv :存储过程和函数的权限
proxies_priv :代理用户权限
有那么多权限表,权限信息是如何存储的呢?通过测试,发现:
--当授权对象为 *.* 时,存储在user表;
--当授权对象为 db.* 时,存储在db表;
--当授权对象为 db.tb 时,存储在tables_priv表;
--当授权对象为 某个表的某个列 时,存储在column_priv表
我们不妨来验证一下上面的结论:
测试1.当授予用户user1 *.*权限时,权限信息保存在user表中,其它权限表未存储相关权限信息。
create user user1 identified by '123456';grant update on *.* touser1;
mysql> select * from mysql.user a where a.user = 'user1'\G*************************** 1. row ***************************Host:%
User: user1
Select_priv: N
Insert_priv: N
Update_priv: Y
Delete_priv: N
Create_priv: N
mysql> select * from mysql.db a where a.user = 'user1';
Emptyset (0.00sec)
mysql> select * from mysql.tables_priv a where a.user = 'user1';
Emptyset (0.00sec)
mysql> select * from my