#################
redaction, #OracleACEPRO, #OracleTIPSSV, 23jul2024
#################
Que es la redacción?
Es una característica de Base de Datos que permite colocar un lente ( así lo llamo yo) enfrente de los datos, dicho lente permite que se observen los datos reales o no, dependiendo el origen de la conexión, el usuario que consulta, etc etc, siendo las propiedades de la sesión las posibles variables que permiten consultar los datos al natural redactados.

Usuarios autorizados de consulta podrán observar los datos de forma normal , mientras los que no, observaran patrones generados con informacion totalmente transformada , parcial, etc, dependiendo del patron.

Existen diferentes tipos de patrones para la transformación ( porque eso es la redacción).
PERO HAY QUE HACER MENCION: LA REDACCION ES PURAMENTE VISUAL, TOTALMENTE ONLINE.

De la pagina de la documentación oficial:

Beneficios

Preparación de la DEMO:
Creamos 2 usuarios
--drop user testuser1 cascade;
create user testuser1 identified by testuser1 quota unlimited on users;
grant create session, create table to testuser1;
--drop user testuser2 cascade;
create user testuser2 identified by testuser2 quota unlimited on users;
grant create session to testuser2;
drop table payment_details purge;
create table payment_details (
id number not null,
customer_id number not null,
card_no number not null,
card_string varchar2(19) not null,
expiry_date date not null,
sec_code number not null,
valid_date date,
constraint payment_details_pk primary key (id)
);
Nos conectamos e insertamos datos:
conn testuser1/testuser1
insert into payment_details values (1, 4000, 1234123412341234, ‘1234-1234-1234-1234’, trunc(add_months(sysdate,12)), 123, null);
insert into payment_details values (2, 4001, 2345234523452345, ‘2345-2345-2345-2345’, trunc(add_months(sysdate,12)), 234, null);
insert into payment_details values (3, 4002, 3456345634563456, ‘3456-3456-3456-3456’, trunc(add_months(sysdate,12)), 345, null);
insert into payment_details values (4, 4003, 4567456745674567, ‘4567-4567-4567-4567’, trunc(add_months(sysdate,12)), 456, null);
insert into payment_details values (5, 4004, 5678567856785678, ‘5678-5678-5678-5678’, trunc(add_months(sysdate,12)), 567, null);
commit;
alter session set nls_date_format=’dd-mon-yyyy’;
column card_no format 9999999999999999

SQL>
SQL>
set linesize 200
SQL> /
Ahora vamos a agregar una simple regla de protección que impida que al conectarse desde una IP especifica los datos se observen naturales.
begin
dbms_redact.add_policy(
object_schema => user,
object_name => ‘payment_details’,
column_name => ‘card_no’,
policy_name => ‘redact_card_info’,
function_type => dbms_redact.full,
expression=> ‘sys_context(”userenv”,”IP_ADDRESS”) = ”192.168.1.1”’
);
end;
/
Si desearemos borrar la politica seria:
begin
dbms_redact.drop_policy (
object_schema => user,
object_name => ‘payment_details’,
policy_name => ‘redact_card_info’
);
end;
/
Al consultar los datos desde la IP indicada:
TOAD EN MI PC
ID CUSTOMER_ID CARD_NO CARD_STRING EXPIRY_DATE SEC_CODE
———- ———– ———- ——————- ———– ———-
VALID_DATE
———-
1 4000 0 1234-1234-1234-1234 27-JUN-25 123
2 4001 0 2345-2345-2345-2345 27-JUN-25 234
3 4002 0 3456-3456-3456-3456 27-JUN-25 345
4 4003 0 4567-4567-4567-4567 27-JUN-25 456
5 4004 0 5678-5678-5678-5678 27-JUN-25 567
5 rows selected.
Al consultar desde otro servidor en la Nube de Oracle
sqlplus testuser1/testuser1@//IPREMOTA:1521/orcl12c.us.oracle.com
SQL*Plus: Release 19.0.0.0.0 – Production on Thu Jun 27 23:43:37 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Thu Jun 27 2024 23:42:59 +00:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 – 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
alter session set nls_date_format=’dd-mon-yyyy’;
column card_no format 9999999999999999
set linesize 200
select *
from payment_details
order by id;

Desde el propio servidor de base de Datos
alter session set nls_date_format=’dd-mon-yyyy’;
column card_no format 9999999999999999
set linesize 200
select *
from payment_details
order by id;
I

Como pudo observarse la redacción es una característica bastante util, transparente a las aplicaciones sin implicaciones de cambio de código y sin implicaciones de no poder alterar los datos, forma parte de la opción Advanced Security Option, de pago extra sobre Licencia de EE.
Espero les sea de utilidad.
saludos.