Получение привилегий моей таблицы для Oracle SQL - PullRequest
0 голосов
/ 16 апреля 2019

В базе данных Oracle есть список таблиц, которые я хочу проверить, есть ли у меня права, особенно для чтения данных.Я знаю только о;

select * from all_tables

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

Вместо того, чтобы перебирать список таблици select для каждой таблицы, есть ли быстрый способ для этого?

Я не администратор и предпочел бы быстрый метод для этого, чем каждый раз возвращаться к администратору базы данных.

1 Ответ

2 голосов
/ 16 апреля 2019

Кажется, вы ошиблись.

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>
...