测试过程中,经常涉及到数据库权限管理的需求,一般情况下,对于测试环境数据库,运维不负责权限的管理,这时候就需要测试人员自己动手了。
比如测试人员自己搭建的服务平台,服务器和数据库都是自维护,有些人想访问数据库,但是又不想给他root账号,这时可以创建一个只读权限的数据库账号,下面将介绍一下数据库权限管理相关的知识点。
一、数据库权限管理的意义
- 出于安全考虑,禁止不相关用户对数据库的敏感性操作;
- 出于管理考虑,让不同用户有不同的权限,方便管理;
- 出于性能考虑,读写分离,减轻对数据库的压力。
二、MySQL权限表
MySQL数据库实际上是通过将用户写入mysql库中对应的权限表来控制访问权限的。
每个数据库实例下面都会有一个mysql库,如下图所示:
该数据库内有30多张数据表,如下图所示:
我们主要关心的是user表,该表记录允许连接到服务器的用户的信息,里面的权限是全局级的。
三、MySQL数据库权限命令格式
通过给数据库用户添加权限之前,需要先创建用户,创建用户的命令格式如下:
create user 用户名 identified by '该用户密码';
创建完用户后,便可以给该用户进行授权,授权的命令格式如下:
grant 权限 on 授权对象(库.表) to 用户@地址段 identified by "该用户的密码";
grant翻译成中文是同意的意思。
权限见下表中黄框中的权限参数:
下面解释一下这些权限参数的意义:
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;