Database beveiligings verbeteringen in Oracle Database 10g
Virtual Private Database (VPD) VerbeteringenColumn-Level VPD PolicyIn 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 MaskingKolom 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 TypesHet 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 QueriesWanneer 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 |