当前位置:   article > 正文

数据库安全:MySQL权限体系划分与实战操作

数据库安全:MySQL权限体系划分与实战操作

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。

在这里插入图片描述

这一章节我们需要知道MySQL的用户权限是如何划分的,怎么修改用户权限。

实际生产环境中,应按照软件安全设计的最小特权原则配置用户权限。

  • 查看权限 show grants for root@localhost;
  • 查看权限 select * from mysql.user where user='root'\G
  • 设置权限 grant select on *.* to test@localhost;
  • 删除权限 revoke select on *.* from test@localhost;

1、权限级别划分

MySQL用户的权限分为5个级别:全局、库、表、字段、程序和函数。

  1. 全局级别:对整个MySQL服务器的权限。存储在 mysql.user 表中,xx.priv字段表示具体的权限,Y表示有权限,N表示没权限。
  2. 数据库级别:对某个数据库的权限。存储在 mysql.db 表中,xx.priv字段表示具体的权限,Y表示有权限,N表示没权限。
  3. 表级别:对某个表的权限。存储在 mysql.priv 表中,xx.priv字段表示具体的权限,这里不再用YN表示,而是具体的Select、Delete这种。
  4. 字段级别:对某个字段的权限。存储在 columns_priv 表中。
  5. 程序和函数级别:对某个程序或函数的权限。存储在 procs_priv 表中。

权限看起来很复杂,但实际分配权限时却很简单:

  • 设置全局权限,就写成 *.*
  • 设置某个数据库的权限,就写成 database.*
  • 设置某个表的权限,就写成 database.table
  • 设置某个字段的权限,就写成 database.table.column

2、权限列表

  • ALL:所有权限
  • ALTER:可以使用 alter 修改表结构
  • ALTER TOUTINE:可以使用 alter toutine 修改存储过程和函数
  • CREATE:可以使用 create 创建表
  • CREATE ROUTINE:可以使用 create routine 创建存储过程和函数
  • CREATE TEMPORARY TABLES:可以使用 create temporary tables 创建临时表
  • CREATE USER:可以使用 create user、drop user、rename user、revoke all privileges 创建、删除、修改用户。
  • CREATE VIEW:可以使用 create view 创建视图
  • DELETE:可以使用 delete 删除数据
  • DROP:可以使用 drop 删除数据库和表
  • EXECUTE:可以使用 execute 执行存储过程
  • FILE:可以使用 select into outfile 和 load data infile 读写文件
  • INDEX:可以使用 create index 和 drop index 创建和删除索引
  • INSERT:可以使用 insert 插入数据
  • LOCK TABLES:可以对拥有 SELECT 权限的表 使用 lock tables 锁表
  • PROCESS:可以使用 show full processlist 查看服务器的进程信息
  • RELOAD:可以使用 flush 刷新表和日志
  • REPLICATION CLIENT:可以查询主从服务器信息
  • REPLICATION SLAVE:可以从主服务器中读取日志
  • SELECT:可以使用 select 查询数据
  • SHOW DATABASE:可以使用 show database 显示所有数据库
  • SHOW VIEW:可以使用 show create view 显示视图信息
  • SHUTDOWN:可以使用 mysqladmin shutdown 关闭MySQL服务器
  • SUPER:可以使用超级用户操作,包括change master,kill,purge master logs,set global,mysqladmin debug
  • UPDATE:可以使用 update 修改数据
  • USAGE:无权限
  • GRANT OPTION:可以使用 grant 将自己的权限授权给其他用户

3、查看用户权限

方式一:以权限设置记录的形式展示用户权限,多条权限配置可叠加生效。

show grants for root@localhost;
  • 1

在这里插入图片描述

方式二:只看权限结果。\G可以让每个字段显示为一行。

 select * from mysql.user where user='root'\G
  • 1

在这里插入图片描述

4、设置用户权限

设置权限的语法格式:

grant select on *.* to test@localhost;
  • 1
  • grant:设置权限的关键字
  • select:给用户设置的权限
  • on:权限对哪些范围生效,*.* 就是对 所有数据库.所有表 都生效。
  • to:给哪个用户设置权限
  • test@localhost:用户名@主机

5、删除用户权限

删除权限的语法格式:

revoke select on *.* from test@localhost;
  • 1
  • revoke:删除权限的命令
  • select:删除哪个权限
  • on:删除权限的范围
  • from:删除谁的权限
  • test@localhost:用户名@主机

6、新用户的默认权限

创建一个新用户,可以发现,用户默认是 USAGE 没有权限。

create user test@localhost;
show grants for test@localhost;
  • 1
  • 2

在这里插入图片描述

登录进去可以发现,新用户连访问mysql库的权限都没有,也无法创建数据库。

quit
mysql -u test
show database;
  • 1
  • 2
  • 3

在这里插入图片描述

7、实战操作

我们切换root,给新用户加一个SELECT权限

quit
mysql -u root -p1234567
grant select on *.* to test@localhost;
show grants for test@localhost;
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

再登录新用户,就能查询所有数据库了。

quit
mysql -u test
show databases;
  • 1
  • 2
  • 3

在这里插入图片描述

再切回root用户,取消新用户的 select,再次查看,可以看到,用户有回到USAGE没有权限的状态了。

quit
mysql -u root -p1234567
revoke select on *.* from test@localhost;
show grants for test@localhost;
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/791198
推荐阅读
相关标签
  

闽ICP备14008679号