当前位置: 首页 > 科技观察

MySQL权限管理实战!

时间:2023-03-12 10:04:50 科技观察

本文转载自微信公众号“MySQL技术”,作者MySQL技术。转载本文请联系MySQL技术公众号。前言:不知道大家是否了解数据库用户权限管理。作为DBA,用户权限管理是工作中不可避免的一部分。尤其是对于生产数据库,数据库用户权限的管理应该更加规范。本文将介绍MySQL用户权限管理相关的内容。1、用户权限介绍当我们创建了一个数据库用户后,我们不能进行任何操作,我们需要为该用户分配适当的访问权限。简单理解MySQL用户权限就是数据库只允许用户做你权限范围内的事情,不能越界。比如你只允许进行select操作,那么你就不能进行update操作。你只能从某个IP连接到MySQL,然后你不能从除该IP以外的其他机器连接到MySQL。在MySQL中,用户的权限也是分等级的,可以授予的权限如下:列级,与表中的特定列相关。例如,UPDATE语句可用于更新对学生表中student_name列的值的权限。表级别,与特定表中的所有数据相关。例如,您可以使用SELECT语句查询学生表中所有数据的权限。数据库级别,与特定数据库中的所有表相关。例如,在现有数据库mytest中创建新表的权限。全局的,与MySQL中的所有数据库相关。例如,删除现有数据库或创建新数据库的权限。权限信息保存在mysql系统库的系统表user、db、tables_priv、columns_priv、procs_priv中。用户表:存储用户帐户信息和全局级别(所有数据库)权限。dbtable:存放数据库级别的权限,决定了哪些用户从哪些主机可以访问这个数据库。tables_priv表:存放表级权限,决定了哪些用户从哪些主机可以访问数据库的这张表。columns_priv表:存储列级别的权限,它决定了哪些用户从哪些主机可以访问数据库表的这个字段。procs_priv表:存储存储过程和函数级别的权限。参考官方文档,可以授予的权限如下表所示:好像有很多种可以授予的权限。其实大致可以分为三类:数据、结构、管理。大致可以分为以下几类:grant语句为数据库用户授权。推荐使用createuser语句创建用户后再单独授权。我们来看下面的例子:#createusercreateuser'test_user'@'%'identifiedby'xxxxxxxx';#globalauthorityGRANTsuper,selecton*.*to'test_user'@'%';#libraryauthorityGRANTselect,insert,更新、删除、创建、更改、执行`testdb`.*to'test_user'@'%';#tablepermissionGRANTselect,inserton`testdb`.tbto'test_user'@'%';#columnpermissionGRANTselect(col1),insert(col1,col2)ON`testdb`.mytblto'test_user'@'%';#GRANT命令说明:super,select表示要授予的具体权限。ON用于指定权限针对哪些库和表。前面的*.*用来指定数据库名,后面的*用来指定表名。TO表示授予用户权限。'test_user'@'%'表示test_user用户,@后跟受限主机,可以是IP、IP段、域名和%,%表示任意位置。#刷新权限flushprivileges;#查看一个用户的权限showgrantsfor'test_user'@'%';#回收权限revokedeleteon`testdb`.*from'test_user'@'%';权限管理是不能忽视的,我们不给数据库用户很大的权限方便。特别是对于生产库,更应该进行权限控制。建议程序用户只授予增删改查等基本权限,个人用户只授予查询权限。出于安全考虑,建议遵循以下经验原则:只授予满足需要的最小权限,防止用户做坏事。比如用户只需要查询,那么只需要select权限即可。创建用户时,限制用户的登录主机,一般为指定IP或内网IP段。分别为每个服务创建数据库用户。单个用户最好只操作一个库。及时记录各个数据库的用户权限等信息,以免遗忘。如果有外部系统调用,配置只读用户,权限精确到表或视图。定期清理不需要的用户,回收权限或删除用户。参考:https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.htmlhttps://www.cnblogs.com/richardzhu/p/3318595.html

猜你喜欢