ClickHouse中GRANT与SET两种角色分配方式的区别是什么?
ClickHouse 角色分配操作
GRANT与SET ROLE的差异 二者的核心定位完全不同,具体区别如下:
- 权限逻辑不同
GRANT <角色> TO <用户>是权限授予操作,作用是给用户开放对应角色的持有资格,相当于给了用户使用该角色的「入场券」,操作持久化存储在元数据中,实例重启不会失效。执行该操作后,用户只是获得了激活该角色的权限,角色关联的权限不会自动生效。SET ROLE <角色> TO <用户>是角色激活/设置操作,作用是将用户已经持有的角色设置为生效状态,本身不具备权限授予能力,如果用户没有提前通过GRANT拿到对应角色的持有权,执行该操作会直接抛出权限错误。 - 生效规则不同
默认不带参数的SET ROLE操作是持久化配置,相当于给用户设置默认角色,用户后续每次登录都会自动激活该角色,权限直接生效;如果添加ON SESSION参数,SET ROLE只会在当前会话临时生效,会话断开后就会恢复原有的角色状态。
典型使用场景示例
需求:给用户user1开通管理员角色权限,且要求用户登录后自动生效
执行步骤:
- 首先授予角色持有资格:
GRANT admin TO user1;- 再设置默认激活该角色:
SET ROLE admin TO user1;
如果仅执行第一步,user1登录后需要手动执行SET ROLE admin;才能获得管理员权限;如果跳过第一步直接执行第二步,会触发权限报错。
内容的提问来源于stack exchange,提问作者Jaewook Choi
相关产品推荐
相关产品推荐

