Článek přečtěte do 7 min.
V Oracle Database 23.6 nabízejí aktualizace Data Redaction nové robustní možnosti ochrany citlivých dat a pomáhají splnit požadavky na shodu.

Zde je shrnutí nových funkcí, po kterém následuje podrobný pohled na několik z nich:

  • Rozšířená podpora zobrazení: Upravte sloupce v cílovém seznamu zobrazení, včetně CREATE VIEW a inline zobrazení.
  • Zásady redigování na základních sloupcích virtuálních sloupců: Redigujte základní sloupec ve virtuálním sloupci.
  • Podpora inline zobrazení s operátory SET: Používejte běžné tabulkové výrazy (klauzule WITH), OUTER JOINs a agregační funkce, jako je COUNT a MAX, ve sloupcích se zásadami redakční úpravy dat.
  • Vylepšená podpora dotazů pro DISTINCT, GROUP BY a ORDER BY: Dotazy, které obsahují výrazy v redigovaných sloupcích v seznamech GROUP BY a SELECT, jsou nyní plně podporovány.

Zde je podrobný pohled na nové funkce, doplněný příklady pomocí vzorového schématu Oracle. Pokud chcete pokračovat, musíte nainstalovat vzorové schéma Oracle, historii prodeje (SH)= nejnovější kopii najdete zde. Jinak si můžete přečíst příkazy a výstup, abyste pochopili vylepšení v Oracle Data Redaction pro Oracle Database 23.6.

Vytvořte uživatele pouze pro čtení a udělte mu příslušná oprávnění k objektům schématu SH.

create user sh_reader identified by Oracle123;

grant create session to sh_reader;

grant read any table on schema sh to sh_reader;

Začnete vytvořením zásady redakční úpravy dat, aniž byste zadali žádné sloupce. Na této zásadě budete stavět přidáním sloupců k redigování a dokonce specifikováním různých výrazů redigování pro určité sloupce. Tato výchozí zásada vždy rediguje hodnoty pro všechny kromě uživatele databáze SH.

BEGIN

    DBMS_REDACT.ADD_POLICY(

      object_schema => 'SH',

      object_name   => 'CUSTOMERS',

      policy_name   => 'REDACT_SENSITIVE_DATA',

         expression     => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ''SH'''

    );

END;

/

Rozšířená podpora zobrazení

Databázové pohledy se často používají ke zjednodušení přístupu k datům jako forma zabezpečení dat, abstrakce dat, agregace dat nebo transformace dat. V této verzi nyní můžete zahrnout výrazy v redigovaných sloupcích do cílového seznamu zobrazení, včetně CREATE VIEW a inline zobrazení. Chcete například vytvořit zjednodušené zobrazení údajů o zákaznících s názvem CUSTOMER_VIEW. Toto zobrazení převede jméno a příjmení, stejně jako stav materiálu, do formátu, kterému budou rozumět vaše nástroje pro vytváření zpráv.

CREATE OR REPLACE VIEW sh.customer_view AS

 SELECT

  cust_id,

  UPPER(cust_first_name) AS FIRST_NAME,

  UPPER(cust_last_name) AS LAST_NAME,

   CASE

    WHEN cust_marital_status IS NULL OR TRIM(cust_marital_status) = '' THEN 'UNKNOWN'

    ELSE UPPER(cust_marital_status)

   END AS marital_status,

  cust_gender AS GENDER,

  cust_email AS EMAIL,

  cust_postal_code AS POSTAL_CODE,

  cust_credit_limit AS CREDIT_LIMIT

 FROM sh.customers;

Použijte zásadu redakce na sloupec CUST_MARITAL_STATUS základní tabulky:

BEGIN

 DBMS_REDACT.ALTER_POLICY (

   object_schema          => 'SH',

   object_name            => 'CUSTOMERS',

   policy_name            => 'REDACT_SENSITIVE_DATA',

   column_name            => 'CUST_MARITAL_STATUS',

   action                 => DBMS_REDACT.ADD_COLUMN,

   function_type          => DBMS_REDACT.FULL);

END;

/

Dále se připojte jako SH_VIEWER a zadejte dotaz na CUSTOMER_VIEW:

SELECT CUST_ID, FIRST_NAME, LAST_NAME, EMAIL, MARITAL_STATUS

  FROM sh.customer_view

 WHERE cust_id IN (101, 103, 176, 201);

V předchozích verzích, pokud vám nebylo uděleno oprávnění EXEMPT REDACTION POLICY, obdržíte tuto chybovou zprávu:

ORA-28094: SQL construct not supported by data redaction

V Oracle Database 23.6 uvidíte vrácená data s redigovaným sloupcem MARITAL_STATUS.

SELECT CUST_ID, FIRST_NAME, LAST_NAME, EMAIL, MARITAL_STATUS

FROM sh.customer_view

WHERE cust_id IN (101, 103, 176, 201);

   CUST_ID FIRST_NAME      LAST_NAME       EMAIL                                  MARITAL_STATUS
---------- --------------- --------------- -------------------------------------- --------------
       101 LOU             FITZ            lou.fitz@company2.example.com
       103 AILEEN          NEWKIRK         aileen.newkirk@company2.example.com
       176 CARIN           LIGHTFOOT       carin.lightfoot@company2.example.com
       201 ALYSSA          CLIPP           alyssa.clipp@company2.example.com

Jak jste ukázali, toto zobrazení aplikuje transformace na sloupce FIRST_NAME a LAST_NAME a upravuje formát sloupců rodinného stavu při zachování zásad redigování na podkladových datech. To umožňuje vašim uživatelům vidět data stejným způsobem ze zobrazení nebo tabulky.

Zásady redakce na základních sloupcích virtuálních sloupců

Spíše než žádat uživatele, aby se dotazovali na jednotlivé sloupce, možná budete chtít zkombinovat více sloupců do jednoho virtuálního sloupce. Například možná nebudete chtít zahrnout poštovní směrovací číslo zákazníka do výsledků dotazu, ale tento sloupec je zahrnut ve vašem virtuálním sloupci FULL_ADDRESS. Dříve nebylo možné použít zásady redakce na sloupec CUST_POSTAL_CODE. Ve 23.6 můžete a zde je příklad. Proveďte následující vytvoření virtuálního sloupce a zkombinujte CUST_STREET_ADDRESS, CUST_CITY, CUST_STATE_PROVINCE a CUST_POSTAL_CODE do FULL_ADDRESS.

ALTER TABLE sh.customers ADD (full_address AS (cust_street_address || ', ' || cust_city || ', ' || cust_state_province || ' ' || cust_postal_code));
BEGIN

    DBMS_REDACT.ALTER_POLICY(

      object_schema => 'SH',

      object_name   => 'CUSTOMERS',

      column_name   => 'CUST_POSTAL_CODE',

      policy_name   => 'REDACT_SENSITIVE_DATA',

      function_type => DBMS_REDACT.FULL

    );

END;

/

V předchozích verzích jste nemohli použít zásadu redigování na sloupec, který je součástí virtuálního sloupce. Zobrazí se tato chybová zpráva:

ORA-28073: The column "CUST_POSTAL_CODE" has an unsupported data type or attribute.

Pokud jste se v předchozích verzích pokusili přidat virtuální sloupec poté, co jste měli zásady redakce, zobrazila by se tato chyba:

ORA-28083: A redacted column was referenced in a virtual column expression.

Ve verzi 23.6 můžete použít zásady redakce na sloupec CUST_POSTAL_CODE a nyní SH_READER uvidí výsledek takto:

SELECT cust_id, cust_last_name, full_address

  FROM sh.customers

 WHERE cust_id IN (101, 103, 176, 201);

   CUST_ID CUST_LAST_NAME FULL_ADDRESS

---------- -------------- ------------

       101 FITZ           

       103 NEWKIRK        

       176 LIGHTFOOT      

       201 CLIPP                             

Poznámka: V této verzi nemůžete použít zásady redigování na samotný virtuální sloupec, pouze na základní sloupce.

Nyní, když zadáte dotaz na zobrazení REDACTION_COLUMNS, uvidíte dva sloupce pro 19c a dva sloupce pro 23.6.

COLUMN column_name FORMAT a25

COLUMN function_type FORMAT a25

 

SELECT column_name, function_type

  FROM REDACTION_COLUMNS

 WHERE OBJECT_OWNER = 'SH'

   AND OBJECT_NAME = 'CUSTOMERS';

COLUMN_NAME          FUNCTION_TYPE

-------------------- -----------------

CUST_MARTIAL_STATUS  FULL REDACTION

CUST_POSTAL_CODE     FULL REDACTION      

Podpora inline zobrazení s operátory SET

Váš obchodní analytik vás požádal, abyste pomohli chránit údaje o úvěrovém limitu zákazníků vaší společnosti. Obchodní analytik potřebuje identifikovat počet zákazníků nad a pod průměrným úvěrovým limitem, aniž by odhalil platové údaje. K tomu musí analytik napsat složitý dotaz, který obsahuje běžné tabulkové výrazy (klauzule WITH), OUTER JOINs a agregační funkce, jako je COUNT a MAX. Můžete to udělat s Oracle Data Redaction 23.6!

Pro toto cvičení by měl obchodní analytik vidět sloupec CUST_POSTAL_CODE. Tento sloupec vypustíte ze zásady redakce dat a přidáte sloupec CUST_CREDIT_LIMIT jako plně redigovaný sloupec.

BEGIN

 DBMS_REDACT.ALTER_POLICY (

   object_schema          => 'SH',

   object_name            => 'CUSTOMERS',

   policy_name            => 'REDACT_SENSITIVE_DATA',

   column_name            => 'CUST_POSTAL_CODE',

   action                 => DBMS_REDACT.DROP_COLUMN);

END;

/

 

BEGIN

 DBMS_REDACT.ALTER_POLICY (

   object_schema          => 'SH',

   object_name            => 'CUSTOMERS',

   policy_name            => 'REDACT_SENSITIVE_DATA',

   column_name            => 'CUST_CREDIT_LIMIT',

   action                 => DBMS_REDACT.ADD_COLUMN,

   function_type          => DBMS_REDACT.FULL);

END;

/

Následující dotaz vytvoří tabulku, která seskupuje zákazníky podle PSČ a zobrazuje počet zákazníků nad a pod úvěrovým limitem, aniž by ve výstupu poskytovala údaje o nejvyšším, nejnižším nebo průměrném úvěrovém limitu.

COLUMN cust_postal_code HEADING 'Postal|Code'

COLUMN total_customer_count HEADING 'Total|Customer|Count'

COLUMN num_customers_below_avg HEADING 'Num Customers|Below Avg'

COLUMN num_customers_above_avg HEADING 'Num Customers|Above Avg'

COLUMN highest_credit_limit HEADING 'Highest|Credit Limit'

COLUMN lowest_credit_limit HEADING 'Lowest|Credit Limit'

COLUMN average_credit_limit HEADING 'Average|Credit Limit'

 

WITH avg_credit_limits AS (

    SELECT cust_postal_code, AVG(cust_credit_limit) AS avg_credit_limit

    FROM sh.customers

    WHERE cust_postal_code IN ('55787', '63736', '38082')

    AND cust_credit_limit IS NOT NULL

    GROUP BY cust_postal_code

)

SELECT

    c.cust_postal_code,

    COUNT(*) AS total_customer_count,

    COUNT(CASE WHEN c.cust_credit_limit < acl.avg_credit_limit THEN 1 END) AS num_customers_below_avg,

    COUNT(CASE WHEN c.cust_credit_limit > acl.avg_credit_limit THEN 1 END) AS num_customers_above_avg,

    MAX(c.cust_credit_limit) AS highest_credit_limit,

    ROUND(MIN(c.cust_credit_limit), 0) AS lowest_credit_limit,

    ROUND(AVG(c.cust_credit_limit), 0) AS average_credit_limit

 FROM sh.customers c

 JOIN avg_credit_limits acl ON c.cust_postal_code = acl.cust_postal_code

WHERE c.cust_postal_code IN ('55787', '63736', '38082')

GROUP BY c.cust_postal_code

ORDER BY c.cust_postal_code;

SH uvidí údaje o úvěrovém limitu.

                Total

Postal       Customer Num Customers Num Customers      Highest       Lowest      Average

Code            Count     Below Avg     Above Avg Credit Limit Credit Limit Credit Limit

---------- ---------- ------------- ------------- ------------ ------------ ------------

38082             695           359           336        15000         1500         5947

55787             612           301           311        15000         1500         6223

63736             637           334           303        15000         1500         5830 

SH_READER neuvidí údaje o kreditním limitu.

                Total

Postal       Customer Num Customers Num Customers      Highest       Lowest      Average

Code            Count     Below Avg     Above Avg Credit Limit Credit Limit Credit Limit

---------- ---------- ------------- ------------- ------------ ------------ ------------

38082             695           359           336            0            0            0

55787             612           301           311            0            0            0

63736             637           334           303            0            0            0

Uvidíte průměry sloupců, které potřebujete vidět, ale ne neredigované údaje o úvěrovém limitu. Uvědomte si, že editace dat neklade žádné omezení na klauzuli WHERE ad hoc SQL, takže klauzuli WHERE lze použít iterativním způsobem k odvození skutečných dat, i když v dotazovaném sloupci existuje zásada úpravy dat a pouze zobrazí se redigovaná hodnota. Pokud však máte připravené analytické sestavy, jako je uvedeno výše, můžete snížit riziko odhalení citlivých dat, aniž byste museli přepisovat dotaz nebo aktualizovat nástroj pro vytváření sestav.

Rozšířená podpora dotazů pro DISTINCT, GROUP BY a ORDER BY

Většina analytických nebo pokročilých dotazů závisí na podpoře klauzulí DISTINCT, GROUP BY a ORDER BY. Dotazy, které obsahují výrazy v redigovaných sloupcích v seznamech GROUP BY i SELECT, jsou nyní plně podporovány. Dotazy využívající klauzule SELECT DISTINCT a ORDER BY mohou nyní navíc obsahovat redigované sloupce, což zajišťuje, že citlivá data zůstanou chráněna, aniž by byla ohrožena funkčnost dotazů.

Předvedete, jak můžete redigovat citlivá data v dotazech analytického typu. Tento dotaz vybere odlišné hodnoty z redigovaného sloupce a seřadí je, přičemž zachová soukromí dat při řazení.

COLUMN cust_postal_code HEADING 'Postal|Code'

COLUMN total_credit_limit HEADING 'Total|Credit'

 

SELECT cust_postal_code, SUM(cust_credit_limit) AS TOTAL_CREDIT_LIMIT

  FROM sh.customers

 GROUP BY cust_postal_code

 ORDER BY total_credit_limit DESC

 FETCH FIRST 10 ROWS ONLY;   ;

Před tímto vydáním byste obdrželi chybu, jako je tato:

ORA-28094: SQL construct not supported by data redaction

Ale v 23.6 můžete vidět data seřazená podle agregovaného součtu mezd pro každé oddělení.

COLUMN cust_postal_code HEADING 'Postal|Code'

COLUMN total_credit_limit HEADING 'Total|Credit'

SELECT cust_postal_code, SUM(cust_credit_limit) AS total_credit_limit

  FROM sh.customers

 GROUP BY cust_postal_code

 ORDER BY total_credit_limit DESC

 FETCH FIRST 10 ROWS ONLY;   

SH uvidí údaje o úvěrovém limitu.

Postal          Total

Code           Credit

---------- ----------

38082         4133000

78558         3904500

55787         3808500

48346         3741000

63736         3713500

45704         3680500

69776         3647500

67843         3606500

72860         3277500

80841         3262500

10 rows selected.

SH_READER neuvidí údaje o kreditním limitu.

Postal          Total

Code           Credit

---------- ----------

38082               0

78558               0

55787               0

48346               0

63736               0

45704               0

69776               0

67843               0

72860               0

80841               0

 

10 rows selected.

Obnovte schéma SH do původní konfigurace.

Chcete-li vyčistit zobrazení, zásady redakce dat a zrušit virtuální sloupec, spusťte následující SQL:

DROP VIEW sh.customer_view;

BEGIN

  DBMS_REDACT.DROP_POLICY(

    object_schema => 'SH',

    object_name   => 'CUSTOMERS',

    policy_name   => 'REDACT_SENSITIVE_DATA'

  );

END;

/

ALTER TABLE sh.customers DROP COLUMN full_address;   

Tyto aktualizace Oracle Data Redaction poskytují výkonné nové nástroje pro správce databází a vývojáře, které zajišťují, že citlivá data zůstanou v bezpečí a budou v souladu s průmyslovými standardy. Integrací těchto funkcí do vaší strategie správy dat můžete zlepšit zabezpečení i funkčnost svých databází Oracle.

Oracle Data Redaction v Oracle Autonomous Database 23ai si můžete zdarma vyzkoušet na Oracle LiveLabs, nebo nás rovnou kontaktujte.

Zdroj: Oracle