Одно и то же имя таблицы, одна и та же схема, разные пользователи в Oracle - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть следующее требование:

  • TABLE1 - имя таблицы
  • Каждый пользователь должен иметь доступ к своей версии TABLE1
  • Данные в разных таблицах TABLE1 управляются их пользователем.
  • Пользователи не должны иметь доступа к TABLE1
  • Все таблицы TABLE1 должны находиться в одной схеме
  • Когда пользователь запускает select * from TABLE1 в клиенте SQL, он должен увидеть свою версию TABLE1.

Возможно ли добиться этого в Oracle?

1 Ответ

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

Возможно все, что вы написали, кроме

  • Все таблицы TABLE1 должны находиться в одной схеме

потому что в одной схеме не может быть двух таблиц с одинаковыми именами.


«Схема» = пользователь + его объекты (таблицы, представления, процедуры, ...). Поэтому каждый пользователь может иметь свою собственную таблицу TABLE1.

Похоже, что есть еще одна схема, которая объединяет данные из всех таблиц TABLE1. Для этого вы можете создать представление как

create or replace view v_table1 as
  select 'USER1' owner, t.* from user1.table1 t union all
  select 'USER2'      , t.* from user2.table1 t union all
  ...

Это означает, что последнее условие, которое вы написали, должно быть немного расширено, добавив предложение WHERE, например,

select * from v_table1 where owner = 'USER2'

С другой стороны, если у каждого пользователя есть свой TABLE1, зачем ему запрашивать этот «агрегированный» (v_)TABLE1?

Наконец, проверьте VPD (виртуальная частная база данных). В двух словах:

Oracle Virtual Private Database (VPD) позволяет вам создавать политики безопасности для управления доступом к базе данных на уровне строк и столбцов. По сути, Oracle Virtual Private Database добавляет динамическое предложение WHERE в инструкцию SQL, которая создается для таблицы, представления или синонима, к которому была применена политика безопасности Oracle Virtual Private Database.

Подробнее здесь: https://docs.oracle.com/cd/B28359_01/network.111/b28531/vpd.htm#DBSEG98215

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