Beveiliging in Oracle 10g - Virtual Private Database

Database beveiligings verbeteringen in Oracle Database 10g

Virtual Private Database (VPD) Verbeteringen

Column-Level VPD Policy

In conventional Virtual Private Database wordt de VPD Policy voor de hele rij toegepast. Als default geeft Kolom-Level VPD Policy je de mogelijkheid om alleen de rijen te verbergen als de gespecificeerde kolom bevraagd wordt:

CONN sys/password@db10g AS SYSDBA
GRANT EXECUTE ON dbms_rls TO scott;

CONN scott/tiger@db10g

-- Creeer de policy function om toegang tot de SAL en COMM kolom te weigeren
-- als de werknemer niet tot department 20 behoort.
CREATE OR REPLACE FUNCTION pf_job (oowner IN VARCHAR2, ojname IN VARCHAR2)
RETURN VARCHAR2 AS
con VARCHAR2 (200);
BEGIN
con := 'deptno = 20';
RETURN (con);
END pf_job;
/

-- Apply de policy function aan de table.
BEGIN
DBMS_RLS.ADD_POLICY (object_schema => 'scott',
object_name => 'emp',
policy_name => 'sp_job',
function_schema => 'scott',
policy_function => 'pf_job',
sec_relevant_cols => 'sal,comm');
END;
/

-- We zien alle records als SAL en COMM aniet zijn gerefereerd
SELECT empno, ename, job FROM emp;

EMPNO ENAME JOB
---------- ---------- ---------
7369 SMITH CLERK
7934 MILLER CLERK

14 rows selected.

-- Rijen zijn beveiligd als SAL or COMM zijn gerefereerd.
SELECT empno, ename, job, sal, comm FROM emp;

EMPNO ENAME JOB SAL COMM
---------- ---------- --------- ---------- ----------
7369 SMITH CLERK 10000
7566 JONES MANAGER 2975
7788 SCOTT ANALYST 3000
7876 ADAMS CLERK 1100
7902 FORD ANALYST 3000

5 rows selected.

-- Verwijder de policy function van de tabel.
BEGIN
DBMS_RLS.DROP_POLICY (object_schema => 'scott',
object_name => 'emp',
policy_name => 'sp_job');
END;
/

Kolom Masking

Kolom masking gedrag wordt geïmplementeerd door gebruik te maken van de "sec_relevant_cols_opt => DBMS_RLS.ALL_ROWS" parameter. Dit geeft je de mogelijkheid om alle rijen te laten zien maar de waarden van de gespecificeerde kolommen, voor de beveiligde rijen te laten zien:
-- Gebruik makend van dezelde l policy function as eerder.
BEGIN
DBMS_RLS.ADD_POLICY (object_schema => 'scott',
object_name => 'emp',
policy_name => 'sp_job',
function_schema => 'scott',
policy_function => 'pf_job',
sec_relevant_cols => 'sal,comm',
sec_relevant_cols_opt => DBMS_RLS.ALL_ROWS);
END;
/

-- Alle rijen komen terug maar de SAL en COMM waarden worden alleen zichtbaar voor
-- werknemers in department 20

SELECT empno, ename, job, sal, comm FROM emp;

EMPNO ENAME JOB SAL COMM
---------- ---------- --------- ---------- ----------
7369 SMITH CLERK 10000
7499 ALLEN SALESMAN
7521 WARD SALESMAN
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN
7698 BLAKE MANAGER
7782 CLARK MANAGER
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT
7844 TURNER SALESMAN
7876 ADAMS CLERK 1100

EMPNO ENAME JOB SAL COMM
---------- ---------- --------- ---------- ----------
7900 JAMES CLERK
7902 FORD ANALYST 3000
7934 MILLER CLERK

14 rows selected.

-- Verwijder de policy function van de tabel.
BEGIN
DBMS_RLS.DROP_POLICY (object_schema => 'scott',
object_name => 'emp',
policy_name => 'sp_job');
END;
/

Policy Types

Het correcte gebruik van policy types kan de prestaties van VPD verhogen door de output van de policy functie in cache geheugen onder te brengen en het toe te passen op verdere queries zonder de policy functie opnieuw uit te voeren. De parameter POLICY_TYPE van de procedure DBMS_RLS.ADD_POLICY wordt gebruikt om één van de vijf policy types te zetten:

  • STATIC -De return waarde van de policy function wordt in het cached geheugen ondergebracht en herhaaldelijk voor een individueel object opnieuw gebruikt. Per definitie moet de returnwaarde van de policy function statisch zijn.
  • SHARED_STATIC -Het zelfde als STATIC maar het resulterende predikaat kan op verscheidene voorwerpen worden toegepast.
  • CONTEXT_SENSITIVE - Gebruikt wanneer de policy rond lokale application context wordt gebaseerd. Het resultaat van de policy function wordt in het cache geheugen ondergebracht en opnieuw gebruikt. De policy function wordt slechts opnieuw uitgevoerd wanneer de waarde van de application context veranderd.
  • SHARED_CONTEXT_SENSITIVE - Hetzelfde als CONTEXT_SENSITIVE maar het resulterende predikaat kan op verscheidene voorwerpen worden toegepast.
  • DYNAMIC - De policy function wordt voor ieder SQL statement uitgevoerd.
Een voorbeeld:
BEGIN
DBMS_RLS.ADD_POLICY (object_schema => 'scott',
object_name => 'emp',
policy_name => 'sp_job',
function_schema => 'scott',
policy_function => 'pf_job',
policy_type => DBMS_RLS.STATIC,
sec_relevant_cols => 'sal,comm',
sec_relevant_cols_opt => DBMS_RLS.ALL_ROWS);
END;
/


Application Context Support for Parallel Queries

Wanneer SYS_CONTEXT van een SQL functie binnen een parallelle vraag wordt aangeroepen, wordt de waarde van de context doorgegeven aan alle parallelle uitvoeringsservers (query slave processes) dit om te zorgen dat de query op de juiste wijze werkt.

zie ook

DBMS_CRYPTO
Fine-Grained Verbetering van de Audit

 
 

Advertentie

>

Poll

Voorkeur
 

Wie is er aanwezig

We hebben 174 gasten online