找出没有特定角色的用户

时间:2019-05-17 09:56:48

标签: sql oracle11g

我在oracle数据库中定义了一组数据库角色。说

  • VIEWER-仅选择
  • UPDATER-仅选择和更新
  • 编辑器-仅选择并删除
  • BYPASSER-仅选择并插入

我有一些用户被授予了所有角色,而有些则没有 无论哪种方式,所有用户都将获得至少一个授予他们的角色。

我的目标是确定所有不具有UPDATER和BYPASSER角色的用户

select grantee from dba_role_privs 
where granted_role not in ('UPDATER','BYPASSER')

上面的代码列出了DB中所有可用的用户,因为所有用户都至少具有授予他们的角色之一。

如何重新构造查询以获得所需的输出?

1 个答案:

答案 0 :(得分:1)

您需要this.selected.forEach(obj => { array.push(obj.id); }); 并在group by grantee子句中添加条件:

HAVING

这将返回同时没有select grantee from dba_role_privs group by grantee having sum( case when granted_role in ('UPDATER','BYPASSER') then 1 else 0 end ) < 2 'UPDATER'角色的用户。
如果您希望没有这些角色的用户,请将条件更改为'BYPASSER'而不是= 0