Oracle对MySQL5.7的扩展支持到2023年10月就结束了,之后可能不再发布新的版本,是时候更多的了解MySQL 8.0了。同时,再看看各个云厂商对于用户和角色的支持情况。
从8.0开始,MySQL开始支持“角色”,帮助用户更好的进行权限管理,使用角色功能,可以批量、规模化的管理用户的权限。如果,需要较大规模新建用户,并对其权限进行管理的时候,这个功能将大大简化权限增加、减少时候的管理工作。
另外,在8.0版本中,MySQL对角色的设计上,非常的“偷懒”,因此,还有很多的隐藏的打开方式,附带的也留下了一些坑需要注意。
基础使用示例
基础的:
- “角色”是代表”一组权限”(例如,某个数据库的读权限、写权限等)的对象,可以将角色赋予某个用户后,该用户使用该角色运行时,则具备这”一组权限”。
- 当角色的权限发生变化(例如,收回或者新增权限)时,对应用户(使用该角色时)的权限也会跟着改变,这对于规模化的用户、权限管理是很方便的。
我们看看如下场景与示例:
- 首先,创建角色t_r_01,并赋予其db_01的读权限;
- 然后,将该角色赋予用户 t_u_01;
- 这时,用户t_u_01就可以通过命令
set role...
使用t_r_01具备的权限 - 另外,也可以像t_u_02一样,将t_r_02设置为其默认角色,则时候,该用户登录时,就自动具备了该角色对应的权限了
对应命令如下:
mysql> CREATE ROLE t_r_01;
mysql> GRANT select ON db_01.* to t_r_01;
mysql> GRANT t_r_01 TO t_u_01;
% mysql -ut_u_01 -p -hxxx
> set role t_r_01;
> select * from db_01.user;
如上就是一个典型的用户和角色的使用场景和主要的命令。那么再看看一些“不典型”的情况吧。
角色底层实现和一些“坑”
在前面,我们看到一个普通的用户和角色,是怎么建立,以及如何利用这个角色实现批量对用户的权限进行管理。这里,我们来看看MySQL对角色的底层实现以及留下的一些“坑”。
从MySQL的元数据上,观察到,在底层:角色就是一个特殊的”用户”,一个没有密码的、被锁定的特殊用