我想知道在Oracle中拥有root(管理)权限的所有用户的列表。 我想在脚本或C ++应用程序中。脚本是首选。
答案 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;