MySQL中的角色是一组权限的集合,通过角色可以统一管理多个用户的访问能力,避免重复授权。从MySQL 8.0开始原生支持角色,使用前需确认版本不低于8.0。

创建角色
使用 CREATE ROLE 语句创建一个或多个角色,角色名称通常包含平台和用途信息:
-- 创建一个只读角色和一个写角色 CREATE ROLE 'app_read', 'app_write';
为角色授权
角色本身没有权限,需要像给用户授权一样使用 GRANT 语句:
-- 给只读角色授予查询权限 GRANT SELECT ON shop.* TO 'app_read'; -- 给写角色授予增删改查权限 GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'app_write';
将角色分配给用户
创建用户后,用 GRANT 把角色赋予用户,用户即可继承角色权限:
-- 创建业务用户 CREATE USER 'tom'@'localhost' IDENTIFIED BY 'Tom_123'; -- 分配角色 GRANT 'app_read' TO 'tom'@'localhost';
激活角色
在MySQL中,即使用户被赋予了角色,默认也可能未激活。可用以下方式激活:
-- 当前会话激活所有已授权角色 SET ROLE ALL; -- 查看当前激活的角色 SELECT CURRENT_ROLE();
查看与回收角色
可通过系统表查看角色授权情况,也可以回收角色或权限:
-- 查看用户被授予了哪些角色 SHOW GRANTS FOR 'tom'@'localhost'; -- 回收用户的角色 REVOKE 'app_read' FROM 'tom'@'localhost'; -- 删除角色 DROP ROLE 'app_read', 'app_write';
使用角色的优势
- 减少重复授权操作,权限变更只需修改角色。
- 权限结构清晰,便于审计和管理。
- 支持角色嵌套,可构建分层权限体系。
注意:角色名称需要用引号包裹,且角色权限的修改对已经激活的角色用户在下一次会话或重新激活后才生效。
通过上述步骤,你可以利用MySQL角色机制高效地管理数据库用户权限,提升运维安全性与便利性。