SQL Server 'default()'数据掩码的Oracle等效实现方法咨询
Oracle 列掩码(数据脱敏)的兼容写法
Oracle中没有SQL Server那种直接ALTER COLUMN ADD MASKED的语法,要实现相同的列掩码功能,需要使用**数据红action(Data Redaction)**功能,通过DBMS_REDACT包创建掩码策略。
对应SQL Server default()掩码的实现语句
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => '你的模式名', -- 替换为表所在的模式,比如SCOTT,留空则用当前用户 object_name => 'Table_Name', column_name => 'YEAR_CODE', policy_name => 'YEAR_CODE_MASK_POL', -- 自定义唯一策略名 function_type => DBMS_REDACT.DEFAULT, -- 对应SQL Server的default()掩码 expression => '1=1' -- 对所有用户生效,可按需调整(比如排除管理员) ); END; /
参数说明
function_type => DBMS_REDACT.DEFAULT:会根据列类型返回默认脱敏值,比如数字列返回0,字符列返回空串,日期列返回01-JAN-00,和SQL Server的default()掩码行为一致。expression:如果需要让特定用户看到原始值,可修改为类似SYS_CONTEXT('USERENV','SESSION_USER') != 'ADMIN_USER'的表达式,只对非管理员用户生效掩码。
验证与管理
执行上述PL/SQL块后,没有EXEMPT REDACTION POLICY权限的用户查询Table_Name时,YEAR_CODE列会显示脱敏后的值;拥有该权限的用户(如DBA)可查看原始数据。
如果需要移除掩码策略,执行以下语句:
BEGIN DBMS_REDACT.DROP_POLICY( object_schema => '你的模式名', object_name => 'Table_Name', policy_name => 'YEAR_CODE_MASK_POL' ); END; /
内容的提问来源于stack exchange,提问作者Raghavendra Maiya
相关产品推荐
相关产品推荐

