VPD--Virtual Private Database / Oracle Policy
1. 說明
Policy應用於資料行訪問許可權控制時,其作用簡而言之,就是在查詢資料表時,自動在
查詢結果上加上一個Where子句。如果該查詢已有where子句,則在該Where子句後面
加上"And ..."。
由Oracle Policy自動加入的Where子句的內容,通常由一個函式來實現。
2. 例項:授權
簡單起見我們用apps使用者做測試,不用授權。如果用其它使用者,比如FWK使用者做測
試,需要用system使用者登入授權:
grant execute on dbms_rls to fwk;
3. 例項:建立表和測試資料
create table dept as select * from scott.dept;
create table emp as select * from scott.emp;
4. 例項:建立策略函式
CREATE OR REPLACE FUNCTION t_vpd_dept_security(obj_schema VARCHAR2, obj_name VARCHAR2)
RETURN VARCHAR2 IS
BEGIN
IF sys_context('USERENV','CURRENT_USER') = 'APPS' THEN
--VPD只會統一報ORA-28112: failed to execute policy function
--raise_application_error(-20001, '你沒有許可權更新');
RETURN 'deptno = 10';
ELSE
RETURN '2 = 2';
END IF;
END;
5. 例項:新增策略到表
BEGIN
BEGIN
dbms_rls.drop_policy(object_schema => 'apps',
--資料表(或檢視)所在的Schema名稱
object_name => 'dept',
--資料表(或檢視)的名稱
policy_name => 't_vpd_dept_policy'
--POLICY的名稱,主要用於將來對Policy的管理
);
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
dbms_rls.add_policy(object_schema => 'apps',
--資料表(或檢視)所在的Schema名稱
object_name => 'dept',
--資料表(或檢視)的名稱
policy_name => 't_vpd_dept_policy',
--POLICY的名稱,主要用於將來對Policy的管理
function_schema => 'apps',
--返回Where子句的函式所在Schema名稱
policy_function => 't_vpd_dept_security',
--返回Where子句的函式名稱
statement_types => 'select',
--要使用該Policy的DML型別,如'Select,Insert,Update,Delete'
update_check => FALSE,
--僅適用於Statement_Type為'Insert,Update',值為'True'或'False'
enable => TRUE
--是否啟用,值為'True'或'False'
);
END;
6. 例項:測試
執行下面語句:
select * from dept d, emp e where d.deptno = e.deptno
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/93880/viewspace-1016027/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20181112]Private Temporary Tables Oracle Database 18C.txtOracleDatabase
- 使用Virtual Private Database實現細粒度訪問控制Database
- 使用Oracle VPD(Virtual Private Database)實現資料庫層面資料許可權OracleDatabase資料庫
- 【VPD】使用Oracle VPD(Virtual Private Database)限制使用者獲取資料的範圍OracleDatabase
- Oracle RAC修改public,private,vip scan IPOracle
- Oracle private dblink和pubic dblinkOracle
- Oracle Database Cloud - Database as a Service Quick StartOracleDatabaseCloudUI
- Types of Oracle Database Users : Database Users (6)OracleDatabase
- Oracle clone databaseOracleDatabase
- ORACLE database vaultOracleDatabase
- Oracle Database HistoryOracleDatabase
- Oracle Database ReplayOracleDatabase
- alter database in OracleDatabaseOracle
- Oracle Database ScriptOracleDatabase
- Oracle Database ServiceOracleDatabase
- Oracle 11.2 RAC改 Private IP步驟Oracle
- oracle 11gR2 如何修改 private ipOracle
- Oracle10g - Private Strand Flush Not CompleteOracle
- Filter-Policy過濾策略&Route-policyFilter
- zt_oracle rac private network cluster interconnectOracle
- Oracle Physical Database LimitsOracleDatabaseMIT
- Oracle sharding databaseOracleDatabase
- Oracle Database Resource ManagerOracleDatabase
- Oracle Database Scheduler整理OracleDatabase
- oracle full database backupOracleDatabase
- Oracle Active database duplicationOracleDatabase
- Oracle Database Memory StructuresOracleDatabaseStruct
- Oracle database buffer cacheOracleDatabase
- Oracle Database In-MemoryOracleDatabase
- oracle rat database replayOracleDatabase
- Oracle database instanceOracleDatabase
- Oracle Database Internals FAQOracleDatabase
- HP ORACLE DATABASE MACHINEOracleDatabaseMac
- oracle database linkOracleDatabase
- oracle 重建EM databaseOracleDatabase
- float datatype in Oracle databaseOracleDatabase
- Types of Oracle Database Users : Database Administrators (1)OracleDatabase
- Laravel Policy 使用Laravel