Elenca l'utente che ha un privilegio di root (amministrativo)
-
27-10-2019 - |
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.
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