问题描述
我已经删除了数据库表的数字列。该列包含十位数字的校验号。对于前三位数字,此校验号列上的修订部分被0屏蔽。
当我从数据库中查询列时,它会跳过前三位数字,仅显示其余7位数字。如果使用非零数字应用了密文,则显示正确。
同样,在用户界面中,当我尝试编辑和修改校验号字段的最后三位数时,在保存数据的同时,它与表中的实际编辑值一起保存。
例如,“校验号” 字段的值是1234567890的,如果它的前三位被零部分掩蔽,则它仅4567890显示在UI/DB中。
如果同一列被前三位数字的8部分掩蔽,而不是零,则在编辑并保存屏幕后,这些值将按原样保存在数据库中。
例如,列中的实际值是1234567890的,并且使用密文将其显示为8884567890。在UI中,我仅将显示值的最后一位修改为888456791。在保存屏幕时,表中的实际值将保存为 “888456791” 而不是1234567891。
当我尝试用 * 或 # 或任何其他特殊字符编辑数字列时,我得到一个错误,说 “ORA-28074: 密文参数的“ REDACT_PARTIAL_MASKCHAR ”字段无效”,同时创建策略本身。
如何实现这一目标?
我的要求是在UI中部分屏蔽Check Number的前三位。掩码字符可以是Number,也可以是任何特殊字符。
下面是我用特殊字符 *(Asterik) 编辑支票号码的前三位数字的方法。
开始
DBMS_REDACT.ADD_POLICY (
object_schema => 'OFSLLPOC',
对象名称 => “UIX_CBC_FVW”,
column_name => 'cbc_check_nbr ',
policy_name => 'redact_cnb_pm ',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => '*,1,3',
expression => 'sys_context (''user_resp''',''resp'') = ''collector''',
启用 =>true
);
结束;
编译此策略时,我收到错误提示ORA-28074: 密文参数的 “REDACT_PARTIAL_MASKCHAR” 字段无效。
无论如何,我可以用特殊字符掩盖数字字段吗?
由于该错误ORA-28074出现,因此我尝试使用该字段的前三位数字的部分掩码创建策略。政策如下。
开始
DBMS_REDACT.ADD_POLICY (
object_schema => 'OFSLLPOC',
对象名称 => “UIX_CBC_FVW”,
column_name => 'cbc_check_nbr ',
policy_name => 'redact_cnb_pm ',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => “0,1,3”,
expression => 'sys_context (''user_resp''',''resp'') = ''collector''',
启用 =>true
);
结束;
当校验号的实际值为1234567890时,由于我将前三位数字部分屏蔽为0,因此它在UI中显示为 “4567890”。当我从数据库中查询数据时也是如此。下面查询的输出是
从UIX_CBC_FVW中选择Cbc_check _nbr;
Cbc_check _nbr
--------------------------
4567890
Now, I try to update the last three digits of this masked field from UI(ADF) to 911, the data in the database gets stored as "45678911" instead of "12345678911" which is incorrect.The ADF Frame work generates update statement for UIX_CBC_FVW as "UPDATE UIX_CBC_FVW SET Cbc_check _nbr=:BV". Since, the masking of the digits is only possible with digits, it considers the masked value as an actual value and updates in the table.
当我从数据库中查询列时,它会跳过前三位数字,仅显示其余7位数字。如果使用非零数字应用了密文,则显示正确。
同样,在用户界面中,当我尝试编辑和修改校验号字段的最后三位数时,在保存数据的同时,它与表中的实际编辑值一起保存。
例如,“校验号” 字段的值是1234567890的,如果它的前三位被零部分掩蔽,则它仅4567890显示在UI/DB中。
如果同一列被前三位数字的8部分掩蔽,而不是零,则在编辑并保存屏幕后,这些值将按原样保存在数据库中。
例如,列中的实际值是1234567890的,并且使用密文将其显示为8884567890。在UI中,我仅将显示值的最后一位修改为888456791。在保存屏幕时,表中的实际值将保存为 “888456791” 而不是1234567891。
当我尝试用 * 或 # 或任何其他特殊字符编辑数字列时,我得到一个错误,说 “ORA-28074: 密文参数的“ REDACT_PARTIAL_MASKCHAR ”字段无效”,同时创建策略本身。
如何实现这一目标?
我的要求是在UI中部分屏蔽Check Number的前三位。掩码字符可以是Number,也可以是任何特殊字符。
下面是我用特殊字符 *(Asterik) 编辑支票号码的前三位数字的方法。
开始
DBMS_REDACT.ADD_POLICY (
object_schema => 'OFSLLPOC',
对象名称 => “UIX_CBC_FVW”,
column_name => 'cbc_check_nbr ',
policy_name => 'redact_cnb_pm ',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => '*,1,3',
expression => 'sys_context (''user_resp''',''resp'') = ''collector''',
启用 =>true
);
结束;
编译此策略时,我收到错误提示ORA-28074: 密文参数的 “REDACT_PARTIAL_MASKCHAR” 字段无效。
无论如何,我可以用特殊字符掩盖数字字段吗?
由于该错误ORA-28074出现,因此我尝试使用该字段的前三位数字的部分掩码创建策略。政策如下。
开始
DBMS_REDACT.ADD_POLICY (
object_schema => 'OFSLLPOC',
对象名称 => “UIX_CBC_FVW”,
column_name => 'cbc_check_nbr ',
policy_name => 'redact_cnb_pm ',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => “0,1,3”,
expression => 'sys_context (''user_resp''',''resp'') = ''collector''',
启用 =>true
);
结束;
当校验号的实际值为1234567890时,由于我将前三位数字部分屏蔽为0,因此它在UI中显示为 “4567890”。当我从数据库中查询数据时也是如此。下面查询的输出是
从UIX_CBC_FVW中选择Cbc_check _nbr;
Cbc_check _nbr
--------------------------
4567890
Now, I try to update the last three digits of this masked field from UI(ADF) to 911, the data in the database gets stored as "45678911" instead of "12345678911" which is incorrect.The ADF Frame work generates update statement for UIX_CBC_FVW as "UPDATE UIX_CBC_FVW SET Cbc_check _nbr=:BV". Since, the masking of the digits is only possible with digits, it considers the masked value as an actual value and updates in the table.
专家解答
已经问了又回答了
https://asktom.oracle.com/pls/apex/asktom.search?tag=redacting-the-number-column-using-dbms-redact
https://asktom.oracle.com/pls/apex/asktom.search?tag=redacting-the-number-column-using-dbms-redact
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。