DSE中REVOKE与RESTRICT命令差异及表级权限撤销失效问题咨询
DSE CQLSH中REVOKE与RESTRICT命令的区别及表级REVOKE失效原因
核心差异
- REVOKE:仅能撤销直接授予角色的对象权限,无法处理从父级对象(如键空间)继承而来的权限。如果角色没有针对目标对象的直接授权,执行REVOKE会触发警告且无实际效果。
- RESTRICT:用于覆盖角色从父级对象继承的权限,在子对象(如表)层面明确拒绝角色的指定权限,优先级高于继承权限,能直接限制角色对该子对象的访问。
场景失效原因解析
你遇到的问题完全符合DSE 6.8.x的权限继承逻辑:
- 首先执行
grant select on keyspace Cycling to 'jane';,为Jane授予了Cycling键空间的SELECT权限,根据权限继承规则,Jane自动获得该键空间下所有表的SELECT权限。 - 当执行
REVOKE select on cycling.cycled from 'jane';时,由于Jane的cycled表SELECT权限是从键空间继承的,并非直接授予的表级权限,REVOKE找不到可撤销的直接授权记录,因此弹出警告且无法生效,Jane仍能访问表数据。 - 而
RESTRICT select on cycling.cycled TO 'jane';是在表层面添加了权限限制,直接覆盖了Jane从键空间继承的SELECT权限,所以能生效,限制她访问该表。
补充验证示例
如果先给Jane直接授予表级权限:
grant select on cycling.cycled to 'jane';
此时再执行REVOKE select on cycling.cycled from 'jane';就能成功撤销权限,因为这是针对表的直接授权,符合REVOKE的作用范围。
内容的提问来源于stack exchange,提问作者Pooja Nair
相关产品推荐
相关产品推荐

