一、为什么需要 Role?
假设公司有 100 名开发人员。
如果不用 Role:
开发A
├── SELECT
├── INSERT
├── UPDATE
└── DELETE
开发B
├── SELECT
├── INSERT
├── UPDATE
└── DELETE
......
开发100
├── SELECT
├── INSERT
├── UPDATE
└── DELETE
每来一个新人,都要重新执行很多次 GRANT。
如果权限发生变化,还要修改所有人的权限。
维护成本非常高。
使用 Role 后
developer_role
│
├── SELECT
├── INSERT
├── UPDATE
└── DELETE
│
├──── 开发A
├──── 开发B
├──── 开发C
└──── 开发D
以后:
新增开发人员:
GRANT developer_role TO 'tom'@'localhost';
即可。
二、Role(角色)是什么?
一句话:
Role 是一组权限的集合。
可以理解成:
Role = 权限包
例如:
developer_role
包含:
SELECT
INSERT
UPDATE
DELETE
任何用户拥有这个 Role,就拥有这些权限。
三、创建角色(CREATE ROLE)
语法
CREATE ROLE '角色名';
例如:
CREATE ROLE 'developer_role';
再创建一个:
CREATE ROLE 'analyst_role';
四、给角色授权
角色创建出来以后,本身没有任何权限。
例如:
GRANT
SELECT,
INSERT,
UPDATE,
DELETE
ON school.*
TO 'developer_role';
现在:
developer_role
↓
拥有:
SELECT
INSERT
UPDATE
DELETE
分析师角色:
GRANT
SELECT
ON school.*
TO 'analyst_role';
分析师只能查询。
五、把角色赋给用户
例如:
已经有用户:
tom
jack
lucy
给 tom:
GRANT 'developer_role'
TO 'tom'@'localhost';
给 Lucy:
GRANT 'analyst_role'
TO 'lucy'@'localhost';
这样:
Tom:
拥有:
SELECT
INSERT
UPDATE
DELETE
Lucy:
拥有:
SELECT
六、设置默认角色
一个用户可能拥有多个角色。
例如:
developer_role
tester_role
登录以后:
可以指定默认角色:
SET DEFAULT ROLE
'developer_role'
TO 'tom'@'localhost';
以后登录:
自动启用:
developer_role
七、查看角色
查看用户权限:
SHOW GRANTS FOR 'tom'@'localhost';
返回类似:
GRANT developer_role TO tom@localhost
八、删除角色
DROP ROLE 'developer_role';
注意:
删除 Role:
Role 消失
↓
用户仍存在
↓
只是失去这个角色带来的权限
九、Role 和 User 的区别(重点)
很多初学者容易混淆。
| User(用户) | Role(角色) |
|---|---|
| 能登录数据库 | 不能登录数据库 |
| 有用户名和密码 | 没有密码 |
| 可以拥有角色 | 可以拥有权限 |
| 代表一个人或程序 | 代表一类权限 |
可以理解成:
Role
↓
权限集合
User
↓
真正登录数据库的人
十、企业真实权限设计
例如:
数据库有三种角色:
admin_role
权限:
所有权限
developer_role
权限:
SELECT
INSERT
UPDATE
DELETE
analyst_role
权限:
SELECT
然后:
Tom
↓
developer_role
Lucy:
Lucy
↓
analyst_role
以后:
Tom 换部门。
只需要:
REVOKE 'developer_role'
FROM 'tom'@'localhost';
GRANT 'analyst_role'
TO 'tom'@'localhost';
不用重新一条一条修改权限。
十一、企业为什么喜欢 Role?
因为:
① 权限统一管理
修改一次 Role:
所有用户自动生效。
② 新员工入职简单
只需要:
GRANT developer_role
TO 新员工;
③ 更安全
不会出现:
A 有 SELECT
B 少 UPDATE
C 多 DELETE
权限混乱。
④ 易于维护
几十人:
还能管理。
几百人:
必须用 Role。
十二、本节总结
| 命令 | 作用 |
|---|---|
CREATE ROLE |
创建角色 |
GRANT ... TO role |
给角色授权 |
GRANT role TO user |
给用户分配角色 |
SET DEFAULT ROLE |
设置默认角色 |
SHOW GRANTS |
查看角色/权限 |
DROP ROLE |
删除角色 |
十三、User 与 Role 对比
| 对比 | User | Role |
|---|---|---|
| 是否能登录 | ✅ | ❌ |
| 是否有密码 | ✅ | ❌ |
| 是否拥有权限 | ✅(直接或通过角色) | ✅ |
| 是否代表人员 | ✅ | ❌(代表权限集合) |
🎯 本节核心一句话
Role(角色)本质上是一组权限的集合,企业通过"角色 → 用户"的方式管理权限,而不是给每个用户单独授权。
📚 思考题
- 为什么企业更推荐使用 Role,而不是直接给每个用户执行
GRANT?
企业使用 Role 是为了实现权限复用、统一管理和降低维护成本。 - Role 和 User 有哪些本质区别?
User 代表"人或程序",Role 代表"权限集合"。 - 为什么说 Role 能降低权限管理成本?
Role 把"用户管理"与"权限管理"分离,大幅减少重复操作。 - 一个用户可以拥有多个 Role 吗?为什么需要这样设计?
多 Role 设计可以让权限组合更加灵活,适应复杂企业组织结构。 - 如果开发人员调到数据分析岗位,使用 Role 和直接修改权限,两种方式哪种维护成本更低?为什么?
使用 Role 只需要调整用户所属角色,不需要逐个修改权限,因此维护成本更低。