前言: 

不清楚各位同学对数据库用户权限管理是否了解,作为一名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表:存放存储过程和函数级别的权限。

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

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

 2.权限管理实战

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

# 创建用户 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'@'%';

点赞(0) 打赏

Comment list 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部