虚拟专用数据库VPD应用 (48天)
时间:2022-05-04
本文章向大家介绍虚拟专用数据库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.
- PHP-循环
- 日志分析实战之清洗日志小实例3:如何在spark shell中导入自定义包
- PHP-函数
- hdu----(5045)Contest(数位dp)
- hdu----(5053)the Sum of Cube(签到题,水体)
- RHEL构建DNS服务器-多区域
- hdu----(5050)Divided Land(二进制求最大公约数)
- 日志分析实战之清洗日志小实例1:使用spark&Scala分析Apache日志
- RHEL构建DNS服务器-单区域
- hdu----(5047)Sawtooth(大数相乘+数学推导)
- hdu----(4522)湫湫系列故事——过年回家(最短路)
- hdu---(1421)搬寝室(dp)
- hdu----(1257)最少拦截系统(dp/LIS)
- nginx安装Fancy美化索引目录
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 进阶(四):数据库操作之 MySQL
- Python 进阶(五):数据库操作之 SQLite
- Python 进阶(六): Excel 基本操作
- 基于Rust-vmm实现Kubernetes运行时
- 云开发如何为腾讯游戏年度发布会保驾护航?
- 跨端方案的三大困境
- Python 进阶(七): Word 基本操作
- Python 进阶(八):XML 基本操作
- Python 进阶(九):JSON 基本操作
- Kafka集群监控系统Kafka Eagle部署与体验
- MySQL information_schema详解 GLOBAL_VARIABLES和SESSION_VARIABLES
- 我爬取了知乎上大学相关话题中的热门高赞问答,其中是否有你大学生活的影子呢?
- MySQL information_schema详解 KEY_COLUMN_USAGE
- Python 实现黑客帝国代码雨效果
- MySQL information_schema详解 ndb_transid_mysql_connection_map