问题描述
我们的应用程序在后端使用ADF作为UI和Oracle数据库12c。
作为法规要求,我们必须屏蔽应用程序的几列。ADF中的实体对象基于视图。
我们已经尝试使用DBMS_REDACT功能解决这些列的掩蔽,在这样做的同时,我们面临以下问题。
1.已在相应列的表上创建策略。在UI上,数据已被屏蔽并正确显示。在编辑和修改任何已编辑/未已编辑的列时,在保存期间,我们会收到 “ORA-28081: 权限不足-命令引用已编辑的对象”
2.已从表中删除策略,并在相应列的视图上创建策略。在编辑和修改任何已编辑/未编辑的列时,在保存期间,我们可以保存值。
现在,它观察到,当在表上创建策略时,视图无法更新被编辑的基础表的任何列。
我们是否有任何解决方法来摆脱这种情况,或者有什么方法可以实现我想要的。我的要求是,虽然策略仍然存在于表中,但我想通过视图对已编辑的表执行DML操作。
下面是我的工作。
1.我在带有部分掩码的表上创建策略
2.我对存在政策的表格有一个看法。
从查找中创建或替换视图UIX_LKC_FVW为SELECT *;
3.更新uix_lkc_fvw设置LKC_DESC = 'ABC',其中ROWNUM<2;
我得到ORA-28081: 权限不足-命令引用一个编辑对象。
4.我删除在步骤1中创建的策略。
5.我用部分掩码在步骤2中创建的视图上创建策略
6.我更新视图UIX_LKC_FVW的基础表
更新查找设置LKC_DESC = 'ABC',其中ROWNUM<2;
1行更新。
问题是,虽然策略仍然只存在于表中,但我想通过基于表创建的视图对已编辑的表执行DML操作。
在上面的示例中,我希望策略保留在查找表中,而我应该能够通过UIX_LKC_FVW对查找表进行DML操作。
作为法规要求,我们必须屏蔽应用程序的几列。ADF中的实体对象基于视图。
我们已经尝试使用DBMS_REDACT功能解决这些列的掩蔽,在这样做的同时,我们面临以下问题。
1.已在相应列的表上创建策略。在UI上,数据已被屏蔽并正确显示。在编辑和修改任何已编辑/未已编辑的列时,在保存期间,我们会收到 “ORA-28081: 权限不足-命令引用已编辑的对象”
2.已从表中删除策略,并在相应列的视图上创建策略。在编辑和修改任何已编辑/未编辑的列时,在保存期间,我们可以保存值。
现在,它观察到,当在表上创建策略时,视图无法更新被编辑的基础表的任何列。
我们是否有任何解决方法来摆脱这种情况,或者有什么方法可以实现我想要的。我的要求是,虽然策略仍然存在于表中,但我想通过视图对已编辑的表执行DML操作。
下面是我的工作。
1.我在带有部分掩码的表上创建策略
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'OFSLLPOC', object_name => 'LOOKUPS', column_name => 'LKC_DESC', policy_name => 'redact_lkc_pm', function_type => DBMS_REDACT.PARTIAL, function_parameters=> 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV,VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV,X,1,15', expression => '1=1', enable=>true ); END;复制
2.我对存在政策的表格有一个看法。
从查找中创建或替换视图UIX_LKC_FVW为SELECT *;
3.更新uix_lkc_fvw设置LKC_DESC = 'ABC',其中ROWNUM<2;
我得到ORA-28081: 权限不足-命令引用一个编辑对象。
4.我删除在步骤1中创建的策略。
BEGIN DBMS_REDACT.DROP_POLICY (object_schema=>'OFSLLPOC' ,object_name=>'LOOKUPS' ,policy_name=>'redact_lkc_pm'); END;复制
5.我用部分掩码在步骤2中创建的视图上创建策略
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'OFSLLPOC', object_name => 'UIX_LKC_FVW', column_name => 'LKC_DESC', policy_name => 'redact_lkc_pm', function_type => DBMS_REDACT.PARTIAL, function_parameters=> 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV,VVVVVVVVVVVVVVVVVVVVVVVVVVVVVV,X,1,15', expression => '1=1', enable=>true ); END;复制
6.我更新视图UIX_LKC_FVW的基础表
更新查找设置LKC_DESC = 'ABC',其中ROWNUM<2;
1行更新。
问题是,虽然策略仍然只存在于表中,但我想通过基于表创建的视图对已编辑的表执行DML操作。
在上面的示例中,我希望策略保留在查找表中,而我应该能够通过UIX_LKC_FVW对查找表进行DML操作。
专家解答
这就是编辑应该如何工作的,例如
但是ADF应该能够通过
-通过视图查询
-通过表格更新
这个过程的描述在这里
http://andrejusb.blogspot.com.au/2012/05/how-to-update-data-from-db-view-using.html
SQL> conn scott/tiger Connected. SQL> create table t as select * from scott.emp; Table created. SQL> create or replace view vw as select * from t; View created. SQL> SQL> SQL> conn / as sysdba Connected. SQL> BEGIN 2 DBMS_REDACT.add_policy( 3 object_schema => 'SCOTT', 4 object_name => 't', 5 column_name => 'sal', 6 policy_name => 'redact_sal', 7 function_type => DBMS_REDACT.full, 8 expression => '1=1' 9 ); 10 END; 11 / PL/SQL procedure successfully completed. SQL> SQL> conn scott/tiger Connected. SQL> select * from t; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 0 20 7499 ALLEN SALESMAN 7698 20-FEB-81 0 300 30 7521 WARD SALESMAN 7698 22-FEB-81 0 500 30 7566 JONES MANAGER 7839 02-APR-81 0 20 7654 MARTIN SALESMAN 7698 28-SEP-81 0 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 0 30 7782 CLARK MANAGER 7839 09-JUN-81 0 10 7788 SCOTT ANALYST 7566 09-DEC-82 0 20 7839 KING PRESIDENT 17-NOV-81 0 10 7844 TURNER SALESMAN 7698 08-SEP-81 0 30 7876 ADAMS CLERK 7788 12-JAN-83 0 20 7900 JAMES CLERK 7698 03-DEC-81 0 30 7902 FORD ANALYST 7566 03-DEC-81 0 20 7934 MILLER CLERK 7782 23-JAN-82 0 10 14 rows selected. SQL> select * from vw; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 0 20 7499 ALLEN SALESMAN 7698 20-FEB-81 0 300 30 7521 WARD SALESMAN 7698 22-FEB-81 0 500 30 7566 JONES MANAGER 7839 02-APR-81 0 20 7654 MARTIN SALESMAN 7698 28-SEP-81 0 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 0 30 7782 CLARK MANAGER 7839 09-JUN-81 0 10 7788 SCOTT ANALYST 7566 09-DEC-82 0 20 7839 KING PRESIDENT 17-NOV-81 0 10 7844 TURNER SALESMAN 7698 08-SEP-81 0 30 7876 ADAMS CLERK 7788 12-JAN-83 0 20 7900 JAMES CLERK 7698 03-DEC-81 0 30 7902 FORD ANALYST 7566 03-DEC-81 0 20 7934 MILLER CLERK 7782 23-JAN-82 0 10 14 rows selected. SQL> SQL> update vw 2 set sal = sal + 10 3 where rownum = 1; where rownum = 1 * ERROR at line 3: ORA-28081: Insufficient privileges - the command references a redacted object. SQL> SQL> update t 2 set sal = sal + 10 3 where rownum = 1; 1 row updated. SQL>复制
但是ADF应该能够通过
-通过视图查询
-通过表格更新
这个过程的描述在这里
http://andrejusb.blogspot.com.au/2012/05/how-to-update-data-from-db-view-using.html
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
597次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
575次阅读
2025-04-18 14:18:38
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
490次阅读
2025-04-08 09:12:48
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
474次阅读
2025-04-20 10:07:02
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
458次阅读
2025-04-22 00:20:37
Oracle 19c RAC更换IP实战,运维必看!
szrsu
434次阅读
2025-04-08 23:57:08
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
433次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
419次阅读
2025-04-17 17:02:24
火焰图--分析复杂SQL执行计划的利器
听见风的声音
366次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
358次阅读
2025-04-15 14:48:05