Sorum, Oracle'da SQL ile verileri de maskeleyecek bir VPD'NİN nasıl oluşturulacağıdır

0

Soru

Oracle'da SQL deyimlerini kullanarak bir VPD oluşturmaya çalışıyorum. Bu sorunun amacı, bir çalışanın iş arkadaşının maaşlarını boş olarak maskelerken YALNIZCA aynı departmandaki çalışanların kayıtlarını görüntüleyebilmesidir.

Kullanılan tablonun kodu aşağıdaki gibidir

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

Bu yapıyor hakkında gitmek için en iyi yolu ne olurdu emin değilim.... bir paket oluşturmak ve bir uygulama bağlamı kullanmak olurdu. Tablo anlıyorum ama aynı BÖLÜMÜ ama farklı KİMLİĞİ ile bu verileri maskesi nasıl emin aynı "BÖL" bu görüntü için almayı düşünüyorum.

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

En iyi cevabı

0

Yerli RLS sizi yaklaştıracak ama tamamen orada olmayacak. "sec_relevant_cols" kullanmak size aşağıdakiler arasında seçenek sunar

  • yalnızca yükleminizle eşleşen satırları görmek, ancak tüm değerler mevcut
  • tüm satırları görmek, ancak yükleminizle eşleşmeyen değerleri maskelemek

oysa (doğru okuyorsam) yalnızca eşleşen satırları görmek VE bazı değerleri de maskelemek istersiniz.

Bunu iki adımlı bir yöntemle başarabilirsiniz

  1. İçeriğiniz iki anahtar içerir (örneğin) DEPT ve YOUR_İD

  2. RLS ilkesi "where dept = sys_context(ctx,'DEPT') " şeklindedir.

  3. Bu politikanın uygulandığı bir görünüm emp'niz var

     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

Bir deneyeceğim! Kayıtlı olan kişiden BORÇ değerini almama izin veren bir bağlam kullanıyordum! Bir tane daha kazanmak için de kullanabileceğimden habersizdim... hepsini aynı paket içinde yapmak mümkün mü?
Venzie

Evet, bağlam, bağlam içindeki anahtarlara/değerlere değil, pakete bağlıdır. Bir bağlamın birçok anahtarı / değeri olabilir. "USERENV" bunun klasik bir örneğidir
Connor McDonald

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................