4

Oracleでroot(管理)権限を持つすべてのユーザーのリストを知りたい。スクリプトまたはC++アプリケーションで使用したいのですが。スクリプトが推奨されます。

4

2 に答える 2

5

Oracleの「ルート」または「管理」権限とは正確にはどういう意味ですか?ユーザーにSYSDBAを付与しますか?または、以前のOracleリリースでは、DBAロールがあり、ユーザーにほとんどすべてのことを実行できるようにする広範な特権セットがありました。11gの機能セットが削減されています。@ client09による回答は、各ユーザーが何ができるかを正確に特定するのに役立ちます。

私にとって、OracleのrootユーザーはSYSDBAアカウントであり、デフォルトではSYSユーザーです。この権限を付与されたユーザーは誰でも「ASSYSDBA」にログインできます。これにより、そのユーザーはデータベースを完全に制御できます。この選択により、この特権を付与されたユーザーを一覧表示できます。

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;

これにより、どのユーザーが特権を膨らませているかがわかります。次のように入力すると、シェルスクリプトでこれを実行できます。

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 に答える