oracle-列出有权访问某些表的用户


28

我敢肯定这已经被问过了,但是我似乎找不到下面的相关细节。

是否有某种可以完成以下操作的预建表(我使用过dba_tab_privs,但是它是有限的,不能满足我的所有需求),如果没有人有一些查询来回答以下问题?

  1. 列出所有被分配了特定角色的用户?
  2. 列出授予用户的所有角色?
  3. 列出授予用户的所有特权?
  4. 列出某个角色赋予SELECT访问权限的表?
  5. 列出用户可以从中选择的所有表?
  6. 列出所有可以在特定表上进行SELECT的用户(通过授予相关角色或通过直接授予(即,可以在joe上进行授予选择))?该查询的结果还应显示用户通过哪个角色拥有此访问权限,或者它是否是直接授予权限。

Answers:


33

列出分配了特定角色的所有用户

-- Change 'DBA' to the required role
select * from dba_role_privs where granted_role = 'DBA'

列出授予用户的所有角色

-- Change 'PHIL@ to the required user
select * from dba_role_privs where grantee = 'PHIL';

列出授予用户的所有特权

select
  lpad(' ', 2*level) || granted_role "User, his roles and privileges"
from
  (
  /* THE USERS */
    select 
      null     grantee, 
      username granted_role
    from 
      dba_users
    where
      username like upper('%&enter_username%')
  /* THE ROLES TO ROLES RELATIONS */ 
  union
    select 
      grantee,
      granted_role
    from
      dba_role_privs
  /* THE ROLES TO PRIVILEGE RELATIONS */ 
  union
    select
      grantee,
      privilege
    from
      dba_sys_privs
  )
start with grantee is null
connect by grantee = prior granted_role;

注意:摘自http://www.adp-gmbh.ch/ora/misc/recursively_list_privilege.html

列出某个角色赋予SELECT访问权限的表?

-- Change 'DBA' to the required role.
select * from role_tab_privs where role='DBA' and privilege = 'SELECT';

列出用户可以从中选择的所有表?

--Change 'PHIL' to the required user
select * from dba_tab_privs where GRANTEE ='PHIL' and privilege = 'SELECT';

列出所有可以在特定表上进行SELECT的用户(通过授予相关角色或通过直接授予(即,可以在joe上进行授予选择))?该查询的结果还应显示用户通过哪个角色拥有此访问权限,或者它是否是直接授予权限。

-- Change 'TABLENAME' below
select Grantee,'Granted Through Role' as Grant_Type, role, table_name
from role_tab_privs rtp, dba_role_privs drp
where rtp.role = drp.granted_role
and table_name = 'TABLENAME' 
union
select Grantee,'Direct Grant' as Grant_type, null as role, table_name
from dba_tab_privs
where table_name = 'TABLENAME' ;

这是一个好的开始,但是#3不包含对象特权,#5不包括SELECT由于角色而可用的特权,而#6则缺失。
Leigh Riffel 2012年

哎呀,需要一些CONNECT BY PRIOR ..为#6
Philᵀᴹ

您对#5的答案是否包括用户可以通过分配的角色选择的表?
dgf 2012年

如果用户从被授予另一个角色的角色中获得特权,这是否可行?
jpmc26

2

有很多方法可以获取所需的信息:

数据字典视图

目前在甲骨文。

您可以查询视图并检索详细信息:例如:

从DBA_COL_PRIVS选择*;

从ALL_COL_PRIVS中选择*;

从USER_COL_PRIVS中选择*;

这告诉您:

DBA视图描述了数据库中所有列对象的授予。ALL视图描述当前用户或PUBLIC是其对象所有者,授予者或被授予者的所有列对象授予。USER视图描述了列对象授予,当前用户为其对象的所有者,授予者或被授予者。

有关更多信息,请查看

希望这可以帮助。


1
这似乎无法回答问题:DBA如何找出特定的任意用户可以访问的内容?
所有行业的乔恩2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.