Таблица запросов без гранта? - PullRequest
0 голосов
/ 02 июля 2018

Если я создаю таблицу для пользователя A.

Как пользователь B может запросить эту таблицу, если я не дал ей привилегий?

В этом коде я создаю таблицу general.privs_test от пользователя DBA с именем "DBA_MAINT".

После этого я переключаюсь на другого пользователя и пытаюсь запросить таблицу.

Нет никаких исключений, даже если на этой таблице нет гранта.

SQL> select user from dual;

USER
------------------------------
DBA_MAINT

SQL> create table general.privs_test(id number);

Table created.

SQL> conn dp99712a
Enter password:
Connected.
SQL> select user from dual;

USER
------------------------------
DP99712A

SQL> select * from general.privs_test;

no rows selected

SQL> desc all_tab_privs;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 GRANTOR                                   NOT NULL VARCHAR2(30)
 GRANTEE                                   NOT NULL VARCHAR2(30)
 TABLE_SCHEMA                              NOT NULL VARCHAR2(30)
 TABLE_NAME                                NOT NULL VARCHAR2(30)
 PRIVILEGE                                 NOT NULL VARCHAR2(40)
 GRANTABLE                                          VARCHAR2(3)
 HIERARCHY                                          VARCHAR2(3)

SQL> select grantee,table_schema,table_name,privilege, grantable from all_tab_pr
ivs where table_name = 'PRIVS_TEST';

no rows selected

Моя версия - ORacle 11 г.

1 Ответ

0 голосов
/ 02 июля 2018

Поскольку таблица создается заново без каких-либо привилегий, пользователь dp99712a должен иметь системную привилегию, позволяющую просматривать все его таблицы. Эта привилегия называется SELECT ANY TABLE и обычно предоставляется роли DBA.

.

Чтобы узнать, так ли это, подключитесь как пользователь dp99712a и запросите:

SELECT * FROM session_privs WHERE PRIVILEGE = 'SELECT ANY TABLE';

Чтобы узнать всех пользователей и роли, которые имеют эту привилегию, вы можете использовать:

SELECT DISTINCT grantee
  FROM dba_sys_privs 
 WHERE PRIVILEGE LIKE 'SELECT ANY TABLE%' ORDER BY 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...