MySQL数据库用户权限有哪些 mysql用户权限管理_mysql 删除赋予用户的权限

测试过程中,经常涉及到数据库权限管理的需求,一般情况下,对于测试环境数据库,运维不负责权限的管理,这时候就需要测试人员自己动手了。

比如测试人员自己搭建的服务平台,服务器和数据库都是自维护,有些人想访问数据库,但是又不想给他root账号,这时可以创建一个只读权限的数据库账号,下面将介绍一下数据库权限管理相关的知识点。

一、数据库权限管理的意义

  • 出于安全考虑,禁止不相关用户对数据库的敏感性操作;
  • 出于管理考虑,让不同用户有不同的权限,方便管理;
  • 出于性能考虑,读写分离,减轻对数据库的压力。

二、MySQL权限表

MySQL数据库实际上是通过将用户写入mysql库中对应的权限表来控制访问权限的。

每个数据库实例下面都会有一个mysql库,如下图所示:

MySQL数据库用户权限有哪些 mysql用户权限管理_mysql 删除赋予用户的权限_02

该数据库内有30多张数据表,如下图所示:

MySQL数据库用户权限有哪些 mysql用户权限管理_mysql 创建用户授权_03

我们主要关心的是user表,该表记录允许连接到服务器的用户的信息,里面的权限是全局级的。

三、MySQL数据库权限命令格式

通过给数据库用户添加权限之前,需要先创建用户,创建用户的命令格式如下:

create user 用户名 identified by '该用户密码';

创建完用户后,便可以给该用户进行授权,授权的命令格式如下:

grant 权限 on 授权对象(库.表) to 用户@地址段 identified by "该用户的密码";

grant翻译成中文是同意的意思。

权限见下表中黄框中的权限参数:

MySQL数据库用户权限有哪些 mysql用户权限管理_mysql 撤销删除_04

下面解释一下这些权限参数的意义:

all privileges            除with grant option(让授权的用户,也可以将这些权限 grant 给其他用户,权限复制)之外的所有权限alter                     对数据表的修改的权限alter routine             更改或者删除存储函数或者存储过程的权限create                    创建数据库及表的权限create routine            更改和弃用存储过程的能力create temporary tables   创建临时表的权限create user               创建、重命名和撤销用户的权限create view               创建视图的权限delete                    数据表中删除数据的权限drop                      允许删除数据库、表、视图的权限execute                   执行存储过程或者调用函数的权限event                     允许查询,创建,修改,删除MySQL事件的权限file                      对系统中的文件(本地文件)读取和写操作的权限;grant option              用户委派权限的权限index                     创建、删除索引的权限insert                    向表中插入数据的权限lock tables               允许对拥有select权限的表进行锁表的权限process                   查看所有用户线程/连接的权限reload                    允许执行flush,重新加载权限表的权限replication client        允许用户查询从服务器和主服务器位置的权限replication slave         允许slave主机通过此用户连接master建立主从的权限select                    允许从表中查看数据的权限show databases            查看所有数据库名的权限show view                 查看视图详细信息的权限shutdown                  允许关闭数据库实例的权限super                     允许执行一系列数据库管理命令的权限(change、master、kill thread、mysqladmindebug、purge master logs、set global...)update                    允许修改表中的数据的权限

授权时注意事项:

注意一:授权的权限

# 授权命令格式grant 权限 on 授权对象(库.表) to 用户@地址段 identified by "该用户的密码"; # 授权给用户所有权限grant all privileges on 授权对象(库.表) to 用户@地址段 identified by "该用户的密码"; # 是让该授权的用户,也可以将它的权限赋予给其他用户,最好不要这样做,拥有授权权限的账户尽量只有一个grant with grant option on 授权对象(库.表) to 用户@地址段 identified by "该用户的密码";

注意二:被授权的范围

*.* 表示为所有的数据库及表 数据库名.*  表示为该数据库下的所有表 数据库名.数据表名 表示为该数据库下的该数据表

注意三:被授权的用户的写法%代替一整个网段

'用户名'@'%.%.%.%' 表示为所有网段都可以用该用户登陆数据库'用户名'@'10.10.10.10' 表示为只有此IP可使用该用户登陆数据库'用户名'@'10.10.10.%' 表示为10.10.10.%该网段的所有主机都可使用该用户登陆数据库

授权示例

授权只读权限

grant select on 数据库名.* to 用户@'%'  identified  by  "密码";

授权插入数据权限

grant insert on 数据库名.* to 用户@'%'  identified  by  "密码";

授权读、插入、更新、删除权限

grant select, insert, update, delete on 数据库名.* to  用户@'%'   identified  by  "密码";

授权完成后需要执行刷新权限操作。

FLUSH PRIVILEGES;