Мой вопрос в том, как создать VPN в Oracle с помощью SQL, который также будет маскировать данные

0

Вопрос

Я пытаюсь создать VPN в Oracle с помощью операторов SQL. Цель этой проблемы состоит в том, чтобы сотрудник мог просматривать записи ТОЛЬКО для сотрудников одного отдела, маскируя зарплаты своих коллег как НУЛЕВЫЕ.

Код используемой таблицы выглядит следующим образом

create table Employee
(
    ID number primary key,
    DEPT varchar2(25),
    SALARY number(8,2),
    NAME varchar2(25)
); 

Я не уверен, как лучше всего это сделать.... было бы создать пакет и использовать контекст приложения. Я считаю, что заставить таблицу отображать только те, кто находится в одном и том же "ОТДЕЛЕ", я понимаю, но не уверен, как замаскировать данные тех, у кого один и тот же отдел, но другой идентификатор.

data-masking oracle sql vpd
2021-11-16 18:11:02
1

Лучший ответ

0

Родной RLS приблизит вас, но не полностью. Использование "sec_relevant_cols" даст вам возможность между

  • вижу только строки, соответствующие вашему предикату, но все значения присутствуют
  • просмотр всех строк, но маскировка значений, которые не соответствуют вашему предикату

принимая во внимание, что (если я правильно читаю) вы хотите видеть только строки, соответствующие предикатам, А также маскировать некоторые значения.

Вы могли бы достичь этого с помощью двухэтапного метода

  1. Ваш контекст содержит два ключа (скажем) DEPT и YOUR_ID

  2. Политика RLS такова: "где отдел = sys_context(ctx,'ОТДЕЛ')".

  3. У вас есть представление EMP, к которому применяется эта политика, будучи

     select 
       id, 
       dept, 
       name,
       case when id = sys_context(ctx,'YOUR_ID') then sal else null end sal
     from EMP_TABLE
    
2021-11-17 05:57:22

Я попробую это сделать! Я использовал контекст, который позволил мне получить значение DEPT от того, кто вошел в систему! Я не знал, что могу использовать его, чтобы получить еще один... возможно ли сделать это все в одном пакете?
Venzie

Да, контекст привязан к пакету, а не к ключам/значениям в контексте. Контекст может иметь много ключей/значений. "USERENV" - классический пример этого
Connor McDonald

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................