Кажется, вы ошиблись.
ALL_TABLES
показывает - как следует из названия - все таблицы, к которым у вас есть доступ, а не (как вы сказали, таблицы, которые у вас есть)- они содержатся в USER_TABLES
).
Вот быстрый тест:
SQL> connect mike/lion@orcl
Connected.
SQL> select count(*) from all_tables;
COUNT(*)
----------
111
SQL> select table_name from all_tables where owner = 'SCOTT';
TABLE_NAME
------------------------------
BONUS
SQL> connect scott/tiger@orcl
Connected.
SQL> grant select on emp to mike;
Grant succeeded.
SQL> connect mike/lion@orcl
Connected.
SQL> select count(*) from all_tables;
COUNT(*)
----------
112
SQL> select table_name from all_tables where owner = 'SCOTT';
TABLE_NAME
------------------------------
EMP
BONUS
SQL>
Привилегия SELECT
- это то, что вас интересует ("... особенно для чтенияdata "), так что - вот и все: как только вы получите привилегию, эта таблица появится в ALL_TABLES
.Нет необходимости исправлять ошибки администратора базы данных.
[EDIT]
Таблица может быть указана в ALL_TABLES, но у вас нет прав для ее выбора,Вот пример:
SQL> connect scott/tiger@orcl
Connected.
SQL> revoke select on emp from mike;
Revoke succeeded.
SQL> grant insert on dept to mike;
Grant succeeded.
SQL> connect mike/lion@orcl
Connected.
SQL> select count(*) from all_tables;
COUNT(*)
----------
112
SQL> select table_name from all_tables where owner = 'SCOTT';
TABLE_NAME
------------------------------
DEPT
BONUS
SQL> select * from scott.dept;
select * from scott.dept
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL>
Чтобы проверить имеющиеся у вас привилегии, запустите
SQL> select table_name, privilege from all_tab_privs where grantor = 'SCOTT';
TABLE_NAME PRIVILEGE
------------------------------ ----------------------------------------
BONUS UPDATE
BONUS SELECT
BONUS INSERT
BONUS DELETE
DEPT INSERT --> see? Only INSERT on DEPT
SQL>