备注:测试数据库版本为MySQL 8.0
这个blog我们来聊聊MySQL用户及权限
MySQL用户和权限介绍
MySQL权限系统通过下面两个阶段进行认证:
1.对连接的用户进行身份认证,合法的用户通过验证,不合法的用户拒绝连接
查看mysql.user表的Host、User、
备注:MySQL 进行身份认证的时候,IP地址和用户名联合进行确认,所以root@localhost 和root@ip 会被MySQL视为不同的用户。
2.对通过认证的合法用户赋予相应的权限,用户可以在这些权限范围内对数据库做相应的操作。
权限相关表:
user(全局级别权限)
db(数据库级别权限)
tables_priv(表级别权限)
columns_priv(列级别的权限)
procs_priv (存储过程和函数的权限)
按照user,db,tables_priv,columns_priv的顺序进行验证。
即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;
如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。
MySQL权限
MySQL都有哪些权限
权限名 | 对应授权表的列 | 用途 |
All/All Privileges | all privileges | 权限代表全局或者全数据库对象级别的所有权限 |
Alter | Alter_priv | 允许许修改表结构的权限,但必须要求有create和insert权限配合。如果是rename表名,则要求有alter和drop原表, create和insert新表的权限 |
Alter routine | Alter_routine_priv | 允许修改或者删除存储过程、函数的权限 |
Create | Create_priv | 允许创建新的数据库和表的权限 |
Create ROLE | Create_role_priv | 允许创建角色 |
Create routine | Create_routine_priv | 允许创建存储过程、函数的权限 |
Create tablespace | Create_tablespace_priv | 允许创建、修改、删除表空间和日志组的权限 |
Create temporary tables | Create_tmp_table_priv | 允许创建临时表的权限 |
Create user | Create_user_priv | 允许创建、修改、删除、重命名user的权限 |
Create view | Create_view_priv | 允许创建视图的权限 |
Delete | Delete_priv | 允许删除行数据的权限 |
Drop | Drop_priv | 允许删除数据库、表、视图的权限,包括truncate table命令 |
Drop role | Drop_role_priv | 允许删除角色 |
Event | Event_priv | 允许查询,创建,修改,删除MySQL事件 |
Execute | Execute_priv | 代表允许执行存储过程和函数的权限 |
File | File_priv | 允许在MySQL可以访问的目录进行读写磁盘文件操作,可使用的命令包括load data infile,select … into outfile,load file()函数 |
Grant option | Grant_priv | 允许此用户授权或者收回给其他用户你给予的权限,重新付给管理员的时候需要加上这个权限 |
Index | Index_priv | 允许创建和删除索引 |
Insert | Insert_priv | 是否允许在表里插入数据,同时在执行analyze table,optimize table,repair table语句的时候也需要insert权限 |
Lock TABLES | Lock_tables_priv | 允许对拥有select权限的表进行锁定,以防止其他链接对此表的读或写 |
Process | Process_priv | 允许查看MySQL中的进程信息,比如执行show processlist, mysqladmin processlist, show engine等命令 |
PROXY | See proxies_priv table | 想让某个用户具有给他人赋予权限的能力,那么就需要proxy权限了,远程用户也可以 |
Reference | References_priv | 允许创建外键 |
Reload | Reload_priv | 允许执行flush命令 |
Replication client | Repl_client_priv | 允许执行show master status,show slave status,show binary logs命令 |
Replication slave | Repl_slave_priv | 允许slave主机通过此用户连接master以便建立主从复制关系 |
Select | Select_priv | 允许从表中查看数据,update、delete语句有where条件的也需要select权限 |
Show databases | Show_db_priv | 通过执行show databases命令查看所有的数据库名 |
Show view | Show_view_priv | 过执行show create view命令查看视图创建的语句 |
Shutdown | Shutdown_priv | 允许关闭数据库实例,执行语句包括mysqladmin shutdown |
Super | Super_priv | 允许执行一系列数据库管理命令 |
Trigger | Trigger_priv | 允许创建,删除,执行,显示触发器的权限 |
Update | Update_priv | 允许修改表中的数据的权限 |
Usage | “no privileges”的同义词 | 创建一个用户之后的默认权限,其本身代表连接登录权限 |
MySQl权限表数据字典
user表&&db表
表名 | user | db |
范围列 | Host | Host |
User | User | |
DB | ||
权限相关列 | Select_priv | Select_priv |
Insert_priv | Insert_priv |