虚拟专用数据库VPD应用 (48天)

系统中有个需求,需要把一个表里的信用卡号字段进行权限管理,大家讨论再三,说TDE不太好,因为需求希望能够让有些用户可以访问这个表,但是卡号字段读不到东西。有些用户可以直接读取该字段的内容。

我给了一个建议,使用VPD,基于列的VPD可以满足这样的需求。

以下是一个样例,供参考。

--create user and grant privileges
create user test identified by test;
grant connect,resource to test;
grant execute dbms_rls to test;
create user credit_test identified by oracle;
grant connect,resource to credit_test;
grant create synonym to credit_test;
--create samples tables
SQL> create table credit_card_test as select object_id card_id,object_name card_name,object_id card_pwd from all_objects ;
Table created.
SQL> select count(*) from all_objects;
  COUNT(*)
----------
      4876
SQL> select * from credit_card_test where rownum<10;
   CARD_ID CARD_NAME                        CARD_PWD
---------- ------------------------------ ----------
       258 DUAL                                  258
       259 DUAL                                  259
       311 SYSTEM_PRIVILEGE_MAP                  311
       313 SYSTEM_PRIVILEGE_MAP                  313
       314 TABLE_PRIVILEGE_MAP                   314
       316 TABLE_PRIVILEGE_MAP                   316
       317 STMT_AUDIT_OPTION_MAP                 317
       319 STMT_AUDIT_OPTION_MAP                 319
       605 MAP_OBJECT                            605
9 rows selected.
SQL> desc credit_card_test
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
CARD_ID                                   NOT NULL NUMBER
CARD_NAME                                 NOT NULL VARCHAR2(30)
CARD_PWD                                  NOT NULL NUMBER
--create synonyms or roles using credit_test
create or replace synonym credit_card_test for test.credit_card_test;
--using test(table owner account)
--add_policy  create_rls.sql
exec  dbms_rls.add_policy(object_schema => 'test',object_name => 'credit_card_test',policy_name => 'card_pwd_policy',function_schema =>'test',policy_function => 'rls_encryption',statement_types =>'select',policy_type => dbms_rls.CONTEXT_SENSITIVE,sec_relevant_cols=>'card_pwd',sec_relevant_cols_opt=>dbms_rls.all_rows);
--add function  create_rls_f.sql
create or replace function rls_encryption (p_owner in varchar2,p_obj in varchar2)
return varchar2
is  v_flag varchar2(1000);
begin
if(p_owner=USER ) then
v_flag:=null;
else
v_flag:='1=2';
end if;
return v_flag;
end;
--drop policy  drop_rls.sql
exec  dbms_rls.drop_policy(object_schema => 'test',object_name => 'credit_card_test',policy_name => 'card_pwd_policy');
SQL> @drop_rls.sql
PL/SQL procedure successfully completed.
SQL> @create_rls.sql
PL/SQL procedure successfully completed.
SQL> @create_rls_f.sql
Function created.
SQL> conn test/test
seConnected.
SQL> lect * from credit_card_test where rownum<10;
   CARD_ID CARD_NAME                        CARD_PWD
---------- ------------------------------ ----------
       258 DUAL                                  258
       259 DUAL                                  259
       311 SYSTEM_PRIVILEGE_MAP                  311
       313 SYSTEM_PRIVILEGE_MAP                  313
       314 TABLE_PRIVILEGE_MAP                   314
       316 TABLE_PRIVILEGE_MAP                   316
       317 STMT_AUDIT_OPTION_MAP                 317
       319 STMT_AUDIT_OPTION_MAP                 319
       605 MAP_OBJECT                            605
9 rows selected.
SQL> conn credit_test/oracle
Connected.
SQL> select * from credit_card_test where rownum<10;
   CARD_ID CARD_NAME                        CARD_PWD
---------- ------------------------------ ----------
       258 DUAL
       259 DUAL
       311 SYSTEM_PRIVILEGE_MAP
       313 SYSTEM_PRIVILEGE_MAP
       314 TABLE_PRIVILEGE_MAP
       316 TABLE_PRIVILEGE_MAP
       317 STMT_AUDIT_OPTION_MAP
       319 STMT_AUDIT_OPTION_MAP
       605 MAP_OBJECT
9 rows selected.

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-04-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

impdp异常中断导致的问题(r2第8天)

今天查看数据库的负载,发现cpu消耗异常的高。里面有不少dw的进程.但是查看impdp的进程却不存在。 查看datapump的进程情况,发现大量的job,但是状...

35811
来自专栏码匠的流水账

聊聊spring cloud的AsyncLoadBalancerAutoConfiguration

本文主要研究一下AsyncLoadBalancerAutoConfiguration

521
来自专栏杨建荣的学习笔记

关于索引扫描的极速调优实战(第一篇) (r3笔记第81天)

一般在生产环境中,如果某个查询中涉及一个大表,走索引扫描是显然是最值得推荐的方式,但是索引扫描有unique index scan, range scan,sk...

2204
来自专栏乐享123

Mysql Cheat

1556
来自专栏landv

一、K3 WISE 开发插件《K3 WISE常用数据表整理》

3597
来自专栏码匠的流水账

聊聊RibbonLoadBalancerClient的choose方法

本文主要研究一下RibbonLoadBalancerClient的choose方法

621
来自专栏杨建荣的学习笔记

通过闪回事务查看数据dml的情况 (r2笔记69天)

昨天有一个网友问我,怎么能够查询一个表中最后一条插入的记录,我大概回复了,可以通过闪回事务来实现,但是得看什么时候插入的数据,也需要一定的运气。 如果通过闪回事...

1953
来自专栏Java学习123

ORACLE数据库日常维护

3378
来自专栏杨建荣的学习笔记

not null constraint和check constriant的问题及分析(64天)

oracle的constraint有6类,如下。 但是基于列的constraint主要有 type 为C,P,R,U 接触比较多的。 今天来和大家讨论chec...

3377
来自专栏编程坑太多

springboot (11) mybatis

1113

扫描关注云+社区