mysql8数据库角色管理
出现了数据库服务中对用户的role支持,表示可以将企业中常用的权限汇总打包为一个特定的role信息,在赋予给指定用户
具体操作演示过程:
# 指定用户操作特定数据库时,具有共性相同的权限:分为运维权限(rw) 分为开发权限(ro)
mysql>help create role;
-- 查看role创建的方法
# 创建指定的role信息
CREATE ROLE 'admin', 'developer';
CREATE ROLE 'webapp'@'localhost';
-- 创建role信息的语句结构信息,不加@信息表示角色白名单为%方式,实际还要根据具体用户定义
mysql> create role baimei_rw,baimei_r;
-- 创建两个不同的role信息
-- baimei_rw: baimei.* rw(select,update,insert,delete)
-- baimei_r: baimei.* r(select)
# 进行role权限信息设定
mysql> grant select on baimei.* to baimei_r;
Query OK, 0 rows affected (0.00 sec)
mysql> grant select,update,insert,delete on baimei.* to baimei_rw;
Query OK, 0 rows affected (0.00 sec)
# 将指定role信息与相应的用户信息进行捆绑
mysql> create user user01@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
mysql> create user user02@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
-- 创建需要捆绑role权限的用户信息
mysql> grant baimei_r to user01@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> grant baimei_rw to user02@'%';
Query OK, 0 rows affected (0.00 sec)
-- 实现不同的role信息与不同的用户进行捆绑
# 进行角色信息激活
# 方式一:手动激活角色
mysql> SET DEFAULT ROLE ALL TO 'lei_test'@'localhost';
mysql> set default role all to user01@'%';
mysql> set default role all to user02@'%';
-- 利用数据库管理员账号手工激活角色
mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| `baimei_r`@`%` |
+----------------+
1 row in set (0.00 sec)
-- user01登录数据库,会显示对应激活的角色信息
mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| `baimei_rw`@`%` |
+----------------+
1 row in set (0.00 sec)
-- user02登录数据库,会显示对应激活的角色信息
#方式二:实现自动激活用户角色信息
mysql > set global activate_all_roles_on_login=on;
[root@db-01 ~]# mysql -uuser01 -p123 -h10.0.0.51
mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| `baimei_r`@`%` |
+----------------+
1 row in set (0.00 sec)
-- user01登录数据库,会显示对应激活的角色信息
[root@db-01 ~]# mysql -uuser02 -p123 -h10.0.0.51
mysql> select current_role();
+-----------------+
| current_role() |
+-----------------+
| `baimei_rw`@`%` |
+-----------------+
1 row in set (0.01 sec)
-- user02登录数据库,会显示对应激活的角色信息
# 进行用户操作验证
mysql> select * from baimei.t1;
+----------+
| name |
+----------+
| zhangsan |
| lisi |
+----------+
2 rows in set (0.04 sec)
mysql> insert into baimei.t1 values ('xiaoQ');
ERROR 1142 (42000): INSERT command denied to user 'user01'@'10.0.0.51' for table 't1'
-- user01只读用户登录数据库,只能查看操作,不能进行其他操作
mysql> select * from baimei.t1;
+--------+
| name |
+--------+
| baimei |
| lisi |
+--------+
2 rows in set (0.00 sec)
mysql> insert into baimei.t1 values ('xiaoQ');
-- user02读写用户登录数据库,可以进行其他操作任务