Невозможно предоставить пользователю какие-либо привилегии в oracle 11gR2, кроме создания сеанса

Я использую базу данных oracle 11g Release 2. Я могу создать пользователя и предоставить ему привилегии создания сеанса, но я не могу предоставить ему привилегию выбора.

create user user1 identified by pass;
User created.
grant create session to user1;
Grant succeeded.
grant select on emp to user1;
Grant succeeded.

После этого я подключаюсь как user1. Теперь, когда я запускаю этот оператор, он говорит

select * from emp;

ответ оракула =

ERROR at line 1:
ORA-00942: table or view does not exist

Затем я проверил привилегии для пользователя user1, используя

select * from session_privs;
PRIVILEGE
---------------------------------
CREATE SESSION

Это означает, что пользователю user1 доступна только привилегия создания сеанса. Как я могу предоставить пользователю user1 права выбора?


person Taimour    schedule 07.12.2013    source источник


Ответы (1)


Предоставление пользователю привилегии SELECT (или любой другой привилегии в этом отношении) не создает синонима. Как user1, который не является владельцем таблицы, вы все равно должны ссылаться на таблицу по ее полному имени с владельцем. Предполагая, что владельца зовут owner1, запрос user1 должен быть:

SELECT * FROM owner1.emp

Что касается запроса словаря данных, то этого тоже следовало ожидать. Эти привилегии записаны в [DBA|ALL|USER]_TAB_PRIVS представлениях:

SELECT * FROM all_tab_privs WHERE grantee = 'USER1'
person Mureinik    schedule 07.12.2013
comment
Дополнительная информация: если вы не хотите постоянно указывать владельца, вы можете (как указано выше) создать синоним. Owner1 может создать синоним, который каждый сможет использовать с CREATE PUBLIC SYNONYM emp FOR owner1.emp ; - person Morbo; 08.12.2013