Oracle8i以后的版本都提供了VPD(virtual private database 虚拟专用数据库)这样一个强大的功能来实现呼声日益增高的系统安全性要求。 通过设置基于VPD的细粒度访问策略,我们可以只通过DBA的工作(不需要修改应用,也就是应用透明化)就可以实现用户只能访问自己有权限访问的数据,当然如果需要更加复杂的权限控制开发人员的参与还是必不可少的。 下面用一个简单的例子来实现这样的功能,在EMP表中的用户登录数据库以后只能查询和更新自己所属部门的其它员工资料,不是本部门的不会显示也不允许更新。 1. 我们需要用到3个用户,一个是拥有EMP表的SCOTT用户,一个是用于设置VPD策略的KAMUS用户,另外一个是在EMP表中有记录的SMITH用户。 SCOTT用户可以利用$ORACLE_HOME/rdbms/admin/scott.sql创建。 @?/rdbms/admin/scott.sql KAMUS用户需要能够执行DBMS_RLS包的权限。 grant execute on dbms_rls to kamus; SMITH用户需要能够读取并更新EMP表的权限。 grant select on scott.emp to smith; 2. 首先用KAMUS用户创建策略权限表。为方便起见我们直接通过EMP表创建,本策略表中包含了员工姓名和所属部门编号。为了更加完善策略函数,我们创建完策略表后在表中新增一条记录,让SMITH用户同时属于20和10这两个部门。 SQL> create table access_policy as select ename,deptno from scott.emp; Table created SQL> select * from access_policy; ENAME DEPTNO ———- —— SMITH 20 ALLEN 30 WARD 30 JONES 20 MARTIN…