【问题标题】:how to use redacted column in packages(it is showing the redacted value)如何在包中使用编辑列(它显示编辑值)
【发布时间】:2019-05-29 02:31:58
【问题描述】:

我想在包含原始数据的包和程序中使用已编辑的列,但它只显示已编辑的列,然后如何在程序中使用实际数据? 在下面的示例中,ename 是已编辑的列,并且完全被编辑为空。

    BEGIN   DBMS_REDACT.add_policy(
object_schema => 'hr',
object_name   => 'new_emp',
column_name   => 'ename',
policy_name   => 'redact_ename_info',
function_type => DBMS_REDACT.full,
expression    => '1=1' );END;/ --Redaction is done for ename column in new_emp table.

    create or replace procedure new_emp_pro(cust_id in varchar2) as
    v_ename varchar2(200):=null;
    begin
    select ename into v_ename from new_emp where empid=cust_id;
    dbms_output.put_line('v_ename :'||v_ename);
    end;
    /

    PL/SQL procedure successfully completed.

    v_ename :

【问题讨论】:

  • 对不起,我不明白这个问题。您能否创建一个测试用例来显示您所拥有的以及您得到的结果?现在看起来,好像 ENAME 对于您传递给该过程的 CUST_ID 为空 (NULL)。如果 CUST_ID 不存在,您将收到 NO_DATA_FOUND 异常。所以……我真的不明白你在说什么。
  • 这将有助于解释您的 VPD (?) 设置,以及哪个用户拥有表、创建过程和执行过程 - 以及适用于每个的规则(如果它们不同) .
  • @Littlefoot :例如,考虑表名 card_info 与列 card_no(4563158794655478) 部分编辑 (4563XXXXXXXX5478) 并且在从数据库中获取 card_no 时,我得到的是编辑后的 ​​card_no,而不是原始 card_no。我的问题是我将如何使用(或获取)原始数据到包或程序中。
  • 啊哈。感谢您发布的解释和代码。现在我明白你在说什么了。不幸的是,我什至从未听说过 DBMS_REDACT 包(什么是无知的,嗯?),我认为您创建了自己的程序来执行此操作。对不起,我帮不了你。我希望其他人能够提供帮助。祝你好运!

标签: oracle oracle12c redaction


【解决方案1】:

您想要做什么,您已经为所有用户编辑了列 ename,因此当您尝试打印它时,系统不会显示该值,因为这是编辑的目的。内部名称值将可用于处理,但在所有处理后应用编辑。如果您能够打印 ename,那么整个编校目的就失败了,因为最终用户能够检索数据。

你可以检查ename是否为null

如果您需要更多详细信息,请告诉我。我最近在生产数据库中实施了修订。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多