Domanda

Voglio conoscere l'elenco di tutti gli utenti che hanno un privilegio root (amministrativo) in Oracle. Mi piacerebbe in una sceneggiatura o in un'applicazione C ++. Lo script è preferito.

È stato utile?

Soluzione

Qui è come Trovi i privilegi dei tuoi utenti:

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;

Questo ti mostrerà quali utenti hanno privilegi gonfiati. È possibile eseguirlo in uno script di shell digitando

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;

Altri suggerimenti

Esattamente cosa intendi per privilegi "root" o "amministrativi" in Oracle? Vuoi che gli utenti siano concessi sysdba? Oppure, nelle vecchie versioni di Oracle, c'era il ruolo DBA, che aveva una vasta serie di privilegi che davano all'utente la possibilità di fare quasi tutto. Ha un set ridotto di capacità in 11 g. La risposta fornita da @client09 è preziosa per identificare esattamente ciò che ogni utente può fare.

Per me, l'utente root in Oracle è l'account SYSDBA, per impostazione predefinita l'utente SYS. Chiunque abbia concesso questo privilegio può accedere a "AS SYSDBA", che dà a quell'utente il controllo completo del database. È possibile elencare gli utenti concessi questo privilegio tramite questa selezione:

SELECT * FROM v$pwfile_users;

È interessante notare che, se mi viene concesso il ruolo di Sysdba e accedo come sysdba, l'utente reale nella sessione 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top