- 权限系统的作用是授予来自某个主机的某个用户可以查询、插入、修改、删除等数据库操作的权限
- 权限控制(授权与回收)的执行语句包括create user, grant, revoke
- 授权后的权限都会存放在MySQL的内部数据库中(数据库名叫mysql),并在数据库启动之后把权限信息复制到内存中
权限级别
权限存储在mysql库的user, db, tables_priv, columns_priv, and procs_priv这几个系统表中,待MySQL实例启动后就加载到内存中
- 3种权限级别
1.全局性的管理权限,作用于整个MySQL实例级别
2.数据库级别的权限,作用于某个指定的数据库上或者所有的数据库上
3.数据库对象级别的权限,作用于指定的数据库对象上(表、视图等)或者所有的数据库对象上 - 查看用户权限
# 查看mysql实例默认root用户的权限
mysql> show grants for root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
# 比root用户在几个权限系统表中的数据
mysql> select * from user where user='root' and host='localhost';
输出全是Y
mysql> select * from db where user='root' and host='localhost';
Empty set
mysql> select * from tables_priv where user='root' and host='localhost';
Empty set
mysql> select * from columns_priv where user='root' and host='localhost';
Empty set
mysql> select * from procs_priv where user='root' and host='localhost';
Empty set
ALL PRIVILEGES: 权限代表全局或者全数据库对象级别的所有权限限配合。如果是rename表名,则要求有alter和drop原表,create和insert新表的权限
Alter routine权限代表允许修改或者删除存储过程、函数的权限
Create权限代表允许创建新的数据库和表的权限
Create routine权限代表允许创建存储过程、函数的权限
Create tablespace权限代表允许创建、修改、删除表空间和日志组的权限
Create temporary tables权限代表允许创建临时表的权限
Create user权限代表允许创建、修改、删除、重命名user的权限
Create view权限代表允许创建视图的权限
Delete权限代表允许删除行数据的权限
Drop权限代表允许删除数据库、表、视图的权限,包括truncate table命令
Event权限代表允许查询,创建,修改,删除MySQL事件
Execute权限代表允许执行存储过程和函数的权限
File权限代表允许在MySQL可以访问的目录进行读写磁盘文件操作,可使用的命令包括load data infile,select … into outfile,load file()函数
Grant option权限代表是否允许此用户授权或者收回给其他用户你给予的权限
Index权限代表是否允许创建和删除索引
Insert权限代表是否允许在表里插入数据,同时在执行analyze table,optimize
table,repair table语句的时候也需要insert权限
Lock权限代表允许对拥有select权限的表进行锁定,以防止其他链接对此表 的读或写
mysqladmin processlist, show engine等命令
• Reference权限是在5.7.6版本之后引入,代表是否允许创建外键
• Reload权限代表允许执行flush命令,指明重新加载权限表到系统内存中,refresh命令代表关闭和重新开启日志文件并刷新所有的表
• Replication client权限代表允许执行show master status,showslave status,showbinary logs命令
• Replication slave权限代表允许slave主机通过此用户连接master以便建立主从复制关系
• Select权限代表允许从表中查看数据,某些不查询表数据的select执行则不需要此权限,如Select 1+1,Select PI()+2;而且select权限在执行update/delete语句中含有where条件的情况下也是需要的
• Show databases权限代表通过执行show databases命令查看所有的数据库名
• Show view权限代表通过执行show create view命令查看视图创建的语句Shutdown权限代表允许关闭数据库实例,执行语句包括mysqladminshutdown
• Super权限代表允许执行一系列数据库管理命令,包括kill强制关闭某个连接命令,change master to创建复制关系命令,以及create/alter/drop server等命令
• Trigger权限代表允许创建,删除,执行,显示触发器的权限
• Update权限代表允许修改表中的数据的权限
• Usage权限是创建一个用户之后的默认权限,其本身代表连接登录权限
mysql> create user t1@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for t1@localhost;
+----------------------------------------+
| Grants for t1@localhost |
+----------------------------------------+
| GRANT USAGE ON *.* TO 't1'@'localhost' |
+----------------------------------------+
系统权限表
权限存储在mysql库的user,db, tables_priv, columns_priv, and procs_priv这几个系统表中,待MySQL实例启动后就加载到内存中
- User表
存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例,如果有全局权限则意味着对所有数据库都有此权限 - Db表
存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库 - Tables_priv表
存放表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的这个表 - Columns_priv表
存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的这个字段 - Procs_priv表
存放存储过程和函数级别的权限
网友评论