虚拟专用数据库VPD应用

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

系统中有个需求,需要把一个表里的信用卡号字段进行权限管理,大家讨论再三,说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

 

   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

 

   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

 

   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.

 

目录
相关文章
|
12天前
|
存储 安全 搜索推荐
酒店管理系统的数据库的应用以及选择
酒店管理系统数据库关乎运营效率和服务质量。数据库用于数据存储、管理、分析及客户关系管理,确保房态与预订精准。选择时重视性能稳定性、数据安全、易用性、可扩展性和成本效益。合适的数据库能提升酒店运营效率并优化客户体验。
21 2
|
1月前
|
存储 监控 关系型数据库
数据库核心术语解析与应用
数据库核心术语解析与应用
61 0
|
1月前
|
存储 运维 关系型数据库
数据的力量:构筑现代大型网站之数据库基础与应用
数据的力量:构筑现代大型网站之数据库基础与应用
49 0
|
2月前
|
存储 NoSQL 关系型数据库
现代数据库技术的发展与应用
本文将探讨现代数据库技术的发展趋势和广泛应用领域。我们将从传统关系型数据库开始,介绍NoSQL数据库、分布式数据库以及最新的图数据库等技术,探讨它们的特点和优势。此外,我们还将讨论数据库在大数据、云计算和物联网等领域中的应用案例,并展望未来数据库技术的发展方向。
|
1月前
|
供应链 数据库 开发者
深入了解数据库锁:类型、应用和最佳实践
深入了解数据库锁:类型、应用和最佳实践
|
7天前
|
存储 数据库连接 数据处理
NumPy与数据库的结合应用探索
【4月更文挑战第17天】本文探讨了NumPy与数据库结合在数据处理和分析中的应用,阐述了结合使用的必要性,包括数据提取、转换、处理与分析及结果存储。通过Python数据库连接库提取数据,转化为NumPy数组进行高效计算,适用于金融等领域的数据分析。结合应用的优势在于高效性、灵活性和可扩展性,但也面临数据转换、性能优化和安全性挑战。
|
14天前
|
存储 传感器 监控
数据库的应用
数据库广泛应用于电子商务、物流、酒店管理、医疗、航空、教育、政府和物联网等领域,用于高效存储和管理商品信息、订单数据、医疗记录、航班详情等各类数据,提升效率和服务质量。随着技术进步,其应用场景将持续扩展。
11 1
|
21天前
|
NoSQL 大数据 数据挖掘
现代数据库技术与大数据应用
随着信息时代的到来,数据量呈指数级增长,对数据库技术提出了前所未有的挑战。本文将介绍现代数据库技术在处理大数据应用中的重要性,并探讨了一些流行的数据库解决方案及其在实际应用中的优势。
|
1月前
|
存储 NoSQL 大数据
新型数据库技术在大数据分析中的应用与优势探究
随着大数据时代的到来,传统数据库技术已经无法满足海量数据处理的需求。本文将探讨新型数据库技术在大数据分析中的应用情况及其所带来的优势,为读者解析数据库领域的最新发展趋势。
|
1月前
|
存储 机器学习/深度学习 NoSQL
数据库技术的发展与应用
数据库技术的发展与应用

热门文章

最新文章