Сначала создайте примеры пользователей "user_a" и "user_b":
SQL> create user user_a identified by user_a default tablespace users temporary tablespace temp;
SQL> create user user_b identified by user_b default tablespace users temporary tablespace temp;
SQL> grant connect to user_a, user_b;
SQL> grant create session to user_a, user_b;
SQL> grant create table to user_a, user_b;
SQL> grant create view to user_a, user_b;
SQL> alter user user_a quota unlimited on users;
SQL> alter user user_b quota unlimited on users;
Теперь подключитесь как USER_A и создайте образцы объектов:
SQL> conn user_a/user_a
Connected.
SQL> create table tbl_a(id number, text varchar2(200));
Table created.
SQL> create view view_a as select id, text from tbl_a;
View created.
Затем подключитесь как USER_B и создайте образцы объектов:
SQL> conn user_b/user_b
Connected.
SQL> create table tbl_b(id number, text varchar2(200));
Table created.
SQL> create view view_b as select id, text from tbl_b;
View created.
И, наконец, снова подключитесь как USER_A для поиска для его таблицы TBL_A:
SQL> conn user_a/user_a
Connected.
SQL> select count(1) from ALL_TAB_PRIVS where grantor = 'USER_A' and PRIVILEGE = 'SELECT' and GRANTEE = 'USER_B';
Out is:
COUNT(1)
----------
0
Теперь предоставьте право выбора при просмотреVIEW_A для USER_B:
SQL> grant select on view_a to user_b;
Grant succeeded.
И снова попробуйте поиск грантов для USER_B для просмотра объекта VIEW_A от USER_A:
SQL> select count(1) from ALL_TAB_PRIVS where grantor = 'USER_A' and PRIVILEGE = 'SELECT' and GRANTEE = 'USER_B';
А теперь результат:
COUNT(1)
----------
1