собирать информацию dba_users в базе данных Oracle при подключении как пользователь - PullRequest
1 голос
/ 27 марта 2012

Я новичок в базе данных Oracle.Я вижу, что, если я подключаюсь как sys пользователь, я могу сделать

select * from dba_users;

Но как только я сделаю conn nonsys@dbid, я больше не могу это делать;Я получу сообщение о том, что

ORA-00942: table or view does not exist

select * from sys.dba_users; тоже не работает.

Не могли бы вы объяснить, почему это так и как я могу это сделать select * from dba_users;после того, как подключился как не-системный пользователь?

Кроме того, disconnect делает меня полностью отключенным;можно ли "выйти" только из текущего пользователя и вернуться к sys в sqlplus, и если да, то как это сделать?

1 Ответ

5 голосов
/ 27 марта 2012

Представления DBA_ * в Oracle содержат информацию обо ВСЕХ объектах в базе данных независимо от владельца. Только административные учетные записи имеют доступ к этим представлениям по умолчанию. Это сделано из соображений безопасности. Чтобы «нормальный» пользователь мог получить доступ к этим представлениям, им должен быть предоставлен доступ к ним, либо непосредственно для каждого представления, либо глобально через такие системные привилегии, как SELECT ANY TABLE (не рекомендуется). Лучше предоставить доступ к фактическому представлению DBA_, которое действительно нужно пользователю. Как правило, представления ALL_ предоставляют обычному пользователю всю необходимую ему информацию.

Чтобы выйти из текущего сеанса пользователя и подключиться как другой пользователь, используйте команду CONNECT:

CONNECT sys/pw as sysdba

EDIT:

Владелец объекта может предоставить доступ к любому из своих объектов другому пользователю или роли с помощью команды GRANT:

GRANT SELECT ON dba_users TO nonsys;

Выполняется как пользователь SYS, это предоставит пользователю select доступ к представлению dba_users для пользователя nonsys.

Как только грант будет выполнен, пользователь nonsys сможет выбрать из этого представления с помощью инструкции SELECT:

SELECT * FROM dba_users;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...