我想知道在 Oracle 中拥有 root(管理)权限的所有用户的列表。我想在脚本或 C++ 应用程序中使用它。首选脚本。
问问题
23045 次
2 回答
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
于 2011-03-19T17:23:46.520 回答
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;
于 2011-03-18T20:11:27.513 回答