详解MySQL 用户权限管理


Posted in MySQL onApril 20, 2021

前言: 

不清楚各位同学对数据库用户权限管理是否了解,作为一名 DBA ,用户权限管理是绕不开的一项工作内容。特别是生产库,数据库用户权限更应该规范管理。本篇文章将会介绍下 MySQL 用户权限管理相关内容。

  1.用户权限简介

当我们创建过数据库用户后,还不能执行任何操作,需要为该用户分配适当的访问权限。

关于 MySQL 用户权限简单的理解就是数据库只允许用户做你权利以内的事情,不可以越界。比如只允许你执行 select 操作,那么你就不能执行 update 操作。只允许你从某个 IP 上连接 MySQL ,那么你就不能从除那个 IP 以外的其他机器连接 MySQL 。

在 MySQL 中,用户权限也是分级别的,可以授予的权限有如下几组:

  • 列级别,和表中的一个具体列相关。例如,可以使用 UPDATE 语句更新表 students 中 student_name 列的值的权限。
  • 表级别,和一个具体表中的所有数据相关。例如,可以使用 SELECT 语句查询表 students 的所有数据的权限。
  • 数据库级别,和一个具体的数据库中的所有表相关。例如,可以在已有的数据库 mytest 中创建新表的权限。
  • 全局,和 MySQL 中所有的数据库相关。例如,可以删除已有的数据库或者创建一个新的数据库的权限。

权限信息存储在 mysql 系统库的 user、db、tables_priv、columns_priv、procs_priv 这几个系统表中。

  • user 表:存放用户账户信息以及全局级别(所有数据库)权限。
  • db 表:存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库。
  • tables_priv 表:存放表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的这个表。
  • columns_priv 表:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的这个字段。
  • procs_priv 表:存放存储过程和函数级别的权限。

参考官方文档,可授予的权限如下表所示:

详解MySQL 用户权限管理

看起来各种可授予的权限有很多,其实可以大致分为数据、结构、管理三类,大概可分类如下:

详解MySQL 用户权限管理

  2.权限管理实战

我们一般用 grant 语句为数据库用户赋权,建议大家先用 create user 语句创建好用户之后再单独进行授权。下面通过示例来具体看下:

# 创建用户
create user 'test_user'@'%' identified by 'xxxxxxxx';

# 全局权限
GRANT super,select on *.* to 'test_user'@'%';

# 库权限
GRANT select,insert,update,delete,create,alter,execute on `testdb`.* to 'test_user'@'%';

# 表权限
GRANT select,insert on `testdb`.tb to 'test_user'@'%';

# 列权限
GRANT select (col1), insert (col1, col2) ON `testdb`.mytbl to 'test_user'@'%';

# GRANT命令说明:
super,select 表示具体要授予的权限。
ON 用来指定权限针对哪些库和表。
*.* 中前面的*号用来指定数据库名,后面的*号用来指定表名。
TO 表示将权限赋予某个用户。
'test_user'@'%' 表示test_user用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。

# 刷新权限
flush privileges;

# 查看某个用户的权限
show grants for 'test_user'@'%';

# 回收权限
revoke delete on `testdb`.* from 'test_user'@'%';

权限管理是一件不容忽视的事,我们不能为了方便而给数据库用户很大的权限。特别是对于生产库,更应该进行权限管控,建议程序用户只赋予增删改查等基础权限,个人用户只赋予查询权限。

出于安全考虑,建议遵循以下几个经验原则:

  • 只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给 select 权限就可以了。
  • 创建用户的时候限制用户的登录主机,一般是限制成指定 IP 或者内网 IP 段。
  • 给各个服务单独创建数据库用户,单个用户最好只能操作单个库。
  • 及时记录各数据库用户权限等信息,以免忘记。
  • 若有外部系统调用,应配置只读用户,并且权限要精确到表或视图。
  • 定期清理不需要的用户,回收权限或者删除用户。

以上就是详解MySQL 用户权限管理的详细内容,更多关于MySQL 用户权限管理的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
MySQL安装后默认自带数据库的作用详解
Apr 27 MySQL
MySQL5.7并行复制原理及实现
Jun 03 MySQL
MySQL系列之二 多实例配置
Jul 02 MySQL
SQL实现LeetCode(196.删除重复邮箱)
Aug 07 MySQL
MySQL中几种插入和批量语句实例详解
Sep 14 MySQL
SpringBoot连接MySQL获取数据写后端接口的操作方法
Nov 02 MySQL
mysql下的max_allowed_packet参数设置详解
Feb 12 MySQL
一文弄懂MySQL索引创建原则
Feb 28 MySQL
MySQL之MyISAM存储引擎的非聚簇索引详解
Mar 03 MySQL
提高系统的吞吐量解决数据库重复写入问题
Apr 23 MySQL
Mysql的Table doesn't exist问题及解决
Dec 24 MySQL
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
Dec 24 MySQL
mysql死锁和分库分表问题详解
Apr 16 #MySQL
MySQL命令行操作时的编码问题详解
Idea连接MySQL数据库出现中文乱码的问题
Apr 14 #MySQL
mysql的MVCC多版本并发控制的实现
mysql查询的控制语句图文详解
详解MySQL InnoDB存储引擎的内存管理
MySQL Innodb关键特性之插入缓冲(insert buffer)
Apr 08 #MySQL
You might like
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
基于php验证码函数的使用示例
2013/05/03 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
实例分析基于PHP微信网页获取用户信息
2017/11/24 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
javascript instanceof,typeof的区别
2010/03/24 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
2014/04/21 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
简单的Python2.7编程初学经验总结
2015/04/01 Python
Python下rrdtool模块的基本使用方法
2015/11/13 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
Python如何快速实现分布式任务
2017/07/06 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
终端业务员岗位职责
2013/11/27 职场文书
员工试用期自我评价
2014/09/18 职场文书
房屋授权委托书范本
2014/10/07 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
保险内勤岗位职责
2015/04/13 职场文书
小学生暑假生活总结
2015/07/13 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
奶茶店的创业计划书该怎么写?
2019/07/15 职场文书
Oracle中update和select 关联操作
2022/01/18 Oracle
HTML+JS实现在线朗读器
2022/02/15 Javascript