Можно ли войти в систему получателей прав из dba_*_privs, если они не найдены в таблице dba_users?

У меня есть 35 получателей прав из таблиц dba_sys_privs и dba_tab_privs, которые не отображаются как имена пользователей в таблице dba_users. Они не назначаются как роли в таблице dba_role_privs. Можно ли их использовать/войти в систему?


person hoppybrew    schedule 16.09.2013    source источник
comment
Вы уверены, что они грантополучатели?   -  person Ben    schedule 17.09.2013
comment
Им предоставляются привилегии, но они могут быть ролями или пользователями. В любом случае не появляются ни в таблицах ролей, ни в таблицах пользователей.   -  person hoppybrew    schedule 17.09.2013
comment
Вы имеете в виду, что их нет в dba_roles? Или dba_role_privs? dba_roles перечисляет все доступные роли. dba_role_privs указывает, какие роли предоставляются разным пользователям. Вполне возможно иметь роли, которым предоставлены привилегии, но которые сами по себе не назначены никаким пользователям. Также возможно, что роли предоставляются другим ролям (что вы увидите в role_role_privs), а не непосредственно другим пользователям. Есть ли шанс, что вы могли бы показать нам, какие именно запросы вы выполняете и какие именно результаты вы получаете?   -  person Justin Cave    schedule 17.09.2013
comment
@JustinCave Я не могу показать вам запрос или результаты. Извиняюсь. Я использую таблицы dba_role_privs и могу запросить таблицу role_role_privs. У меня нет доступа, чтобы запустить их самостоятельно. Просто делаю анализ. Благодарю вас! Вы ответили на мой вопрос, когда сказали, что могут существовать роли, которые никому не назначены.   -  person hoppybrew    schedule 17.09.2013


Ответы (1)


Комментарий Джастина Кейва должен объяснить 34 из ваших 35 значений: роль может быть в DBA_ROLES, но не в DBA_ROLE_PRIVS.

Последнее значение, вероятно, PUBLIC, это специальная роль, которая работает по-другому. чем другие роли.

--Grantees who are not users or roles.
select * from
(
    --Grantees
    select grantee from dba_sys_privs union
    select grantee from dba_tab_privs
)
minus
(
    --Users and roles
    select username from dba_users union
    select role from dba_roles
);

GRANTEE
-------
PUBLIC

Если вы используете as sysoper, вы можете сделать так, чтобы это выглядело так, как будто вы вошли в систему как ОБЩЕСТВЕННЫЙ. , но это не считается.

person Jon Heller    schedule 16.09.2013