mysql数据库用户权限管理及数据安全分析
一、mysql数据库用户权限级别
全局性管理权限:作用于整个mysql实例级别
数据库级别:作用于指定的某个数据库上或者所有数据库上
数据库对象级别权限:作用于指定的数据库对象上(表或者视图)
二、mysql数据库用户权限说明与安全风险分析
权限 | 权限说明 | 安全风险分析 |
All/All Privileges | 全局或者全数据库对象级别的所有权限 | 风险性大,该权限命令,具有删除数据库的权限,误操有删除数据库的风险。属于非常粗力度的授权,不满足权限管理的最小化原则,一般不建议用户用该命令授权。 |
Alter | 修改表结构的权限,但必须要求有create和insert权限配合 | |
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 | 在表里插入数据 | |
Lock | 对拥有select权限的表进行锁定,以防止其他链接对此表的读或写 | |
Process | 允许查看MySQL中的进程信息,比如执行show processlist, mysqladmin processlist, show engine等命令 | |
Reference | 允许创建外键 | |
Reload | 执行flush命令,指明重新加载权限表到系统内存中 | |
Replication client | 执行show master status,show slave status,show binary logs命令 | |
Replication slave | 允许slave主机通过此用户连接master以便建立主从复制关系 | |
Select | 从表中查看数据 | |
Show databases | 通过执行show databases命令查看所有的数据库名 | |
Show view | 通过执行show create view命令查看视图创建的语句 | |
Shutdown | 关闭数据库实例,执行语句包括mysqladmin shutdown | 风险较大,属于全局性权限。 |
Super | 允许执行一系列数据库管理命令,包括kill强制关闭某个连接命令,change master to创建复制关系命令,以及create/alter/drop server等命令 | |
Trigger | 允许创建,删除,执行,显示触发器的权限 | |
Update | 修改表中数据的权限 | |
Usage | 创建一个用户之后的默认权限,本身代表无权限 | |
三、MySQL用户授权层级分类
授权就是为某个用户授予权限,合理的授权可以保证数据库的安全,MySQL中可以使用GRANT语句为用户授予权限。授权可以分为多个层次:
全局层级:全局权限适用于一个给定服务器中的所有数据库,这些权限存储在mysql.user表中。
数据库层级:数据库权限适用于一个给定数据库中的所有目标,这些权限存储在mysql.db表中。
表层级:表权限适用于一个给定表中的所有列,这些权限存储在mysql.tables_priv表中。
列层级:列权限使用于一个给定表中的单一列,这些权限存储在mysql.columns_priv表中。
子程序层级:CREATE ROUTINE、ALTER ROUTINE、EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予子程序层级,并存储在mysql.procs_priv表中。
四、MySQL数据库用户类型
系统管理用户:一般为root用户,具有最大级别的权限。或者具有grant all privileges on *.* to 'ua'@'%' with grant option;授权的用户。
数据库开发人员用户:创建表、索引、视图、存储过程、函数等权限授权
普通业务用户:具有insert、delete、update、select等符合业务需要的权限。
五、用户应用范围
可以通过select user,host from mysql.user;命令查询该库所有用户的可以连接的范围,如下图所示

关注具有全局权限的用户的使用范围,是否是安全可控的。
六、MySQL的授权解析
1)创建一个新用户test1仅2.37.6.0段可以使用

MySQL语句为:create user ‘test1’@’2.37.6.%’ identified by ‘123’;
2.37.7.6.%:代表2.37.6.0网段的所有主机终端均可使用该用户连接数据库
注意:在安全管理中确定一些用户的使用范围是否在必要的安全范围内。
2)给该用户授权,给test1用户授权school数据下的表t1具有增删改查权限

Mysql语句为:grant insert,delete,update,select on school.t1 to ‘test’@’2.37.6.%’;
insert,delete,update,select:具体的权限
School:要授权的库名。*代表所有库
t1:要授权的该库下的具体表名、视图等数据库对象名称。*代表该库下所有对象。
注意:当授权对象写的是*.*代表MySQL实例下的所有数据库所有对象。具有全局权限,风险较大,在安全管理中需要去杜绝该类授权。确保授权对象清晰可控。
3)授权语句中给予with grant option权限,该权限可以传递自己的权限授权给他人,除了数据库管理员,其他业务用户,业务数据库开发用户都要避免给予该权限,确保数据库授权统一管理。




