список пользователей с правами администратора (администратора) - PullRequest
4 голосов
/ 18 марта 2011

Я хочу знать список всех пользователей, имеющих root (административные) права в Oracle. Я хотел бы это в скрипте или C ++ приложении. Сценарий является предпочтительным.

Ответы [ 2 ]

5 голосов
/ 19 марта 2011

Что именно вы имеете в виду под «root» или «административными» привилегиями в Oracle?Вы хотите, чтобы пользователи получили SYSDBA?Или, в более старых версиях Oracle, была роль DBA, которая имела обширный набор привилегий, которые давали пользователю возможность делать практически все что угодно.У него уменьшенный набор возможностей в 11g.Ответ, предоставленный @ client09, полезен для точного определения того, что может сделать каждый пользователь.

Для меня пользователь root в Oracle является учетной записью 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
4 голосов
/ 18 марта 2011

Вот как вы найдете привилегии ваших пользователей:

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;
...