列出具有root(管理)权限的用户

时间:2011-03-18 19:37:19

标签: oracle database-administration

我想知道在Oracle中拥有root(管理)权限的所有用户的列表。 我想在脚本或C ++应用程序中。脚本是首选。

2 个答案:

答案 0 :(得分:5)

Oracle的“root”或“adminstrative”特权究竟是什么意思?您想要用户授予SYSDBA吗?或者,在较旧的Oracle版本中,存在DBA角色,该角色具有一组广泛的权限,使用户能够执行大部分操作。它在11g中具有减少的功能集。 @ client09给出的答案对于准确识别每个用户可以做什么很有价值。

对我来说,Oracle中的root用户是SYSDBA帐户,默认情况下是SYS用户。获得此权限的任何人都可以登录“AS SYSDBA”,这使该用户可以完全控制数据库。您可以通过以下选择列出授予此权限的用户:

SELECT * FROM v$pwfile_users;

有趣的是,如果我被授予SYSDBA角色,并且我以sysdba身份登录,那么Oracle会话中的实际用户就是SYS:

SQL> create user test identified by test;

User created.

SQL> grant create session to test;

Grant succeeded.

SQL> grant sysdba to test;

Grant succeeded.

SQL> connect test/test as sysdba
Connected.
SQL> select user from dual;

USER
------------------------------
SYS

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS                            TRUE  TRUE  FALSE
TEST                           TRUE  FALSE FALSE

答案 1 :(得分:4)

以下是如何您找到用户的权限:

select
  lpad(' ', 2*level) || granted_role "User, his roles and privileges"
from
  (
  /* THE USERS */
    select 
      null     grantee, 
      username granted_role
    from 
      dba_users
  /* 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;

这将显示哪些用户具有虚增的权限。您可以通过键入

在shell脚本中执行此操作
sqlplus / as sysdba --(if you are root on the box)
spool user_privileges.txt
@whos_a_root.sql --(if that's what you call your script)
spool off
exit;