Как я могу запретить пользователю запрашивать SELECT в других схемах в Oracle? - PullRequest
0 голосов
/ 09 мая 2019

Я использую Oracle 11g (11.2.0.1.0). Я создал около 20 табличных пространств и пользователей. И данные поступили из [Инструменты] - [Копирование базы данных] в Oracle SQL Developer.

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

Я прочитал «Руководство по безопасности баз данных Oracle 11g, выпуск 2 (11.2)», но не смог найти четкое решение.

Вот мои запросы на создание и предоставление.

create user [USER_NAME]
identified by [PASSWORD]
default tablespace [TABLESPACE_NAME]
temporary tablespace TEMP;

grant create session,
      create database link,
      create materialized view,
      create procedure,
      create public synonym,
      create role,
      create sequence,
      create synonym,
      create table,
      drop any table,
      create trigger,
      create type,
      create view to [USER_NAME];

alter user [USER_NAME] quota unlimited on [TABLESPACE_NAME];

А вот SELECT результат session_privs для пользователя.

SQL> SELECT * FROM session_privs;

PRIVILEGE
--------------------------------------------------------------------------------
CREATE SESSION
CREATE TABLE
DROP ANY TABLE
CREATE SYNONYM
CREATE PUBLIC SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE DATABASE LINK
CREATE ROLE
CREATE PROCEDURE
CREATE TRIGGER

PRIVILEGE
--------------------------------------------------------------------------------
CREATE MATERIALIZED VIEW
CREATE TYPE

13 rows selected.

Я хочу запретить пользователю запрашивать SELECT в других схемах.

Например, следующий запрос

-- connected with USER1
SELECT *
  FROM USER2.table1;

должен сделать ошибку вроде:

ERROR: USER1 doesn't have SELECT privilege on USER2.

Отредактировано:

  • Используйте соответствующие термины (некоторые слова изменены с tablespace на schema)
  • Добавить SELECT результат session_privs для пользователя
  • Добавьте метод получения данных.

1 Ответ

0 голосов
/ 10 мая 2019

Это была моя вина.Я пропустил, что добавил несколько ролей с.

. Для копирования данных с помощью Oracle SQL Developer я добавил предопределенные роли для пользователей.Роли были exp_full_database и imp_full_database.

Согласно Oracle Database Security Guide: Настройка привилегий и авторизации ролей , exp_full_database содержит эти привилегии:

  • SELECT ANY TABLE
  • BACKUP ANY TABLE
  • EXECUTE ANY PROCEDURE
  • EXECUTE ANY TYPE
  • ADMINISTER RESOURCE MANAGER
  • INSERT, DELETE, UPDATE ON SYS.INCVID, SYS.INCFIL AND SYS.INCEXP

и роли:

  • EXECUTE_CATALOG_ROLE
  • SELECT_CATALOG_ROLE

Эти роли сейчас не требуются.Таким образом, ответ заключается в удалении их из пользователей.

REVOKE exp_full_database, imp_full_databsae FROM USER1;

И я получаю желаемый результат.

-- connected with USER1
SELECT * FROM USER2.TABLE1;

ERROR at line 1:
ORA-01031: insufficient privileges
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...