Una máscara de columna especifica las reglas para que los usuarios reciban los valores enmascarados que se devuelven para la columna. Con la autoridad SECADM, puede utilizar la sentencia CREATE MASK para crear una máscara de columna.
Antes de empezar
Si el parámetro del sistema SEPARATE_SECURITY en el panel DSNTIPP1 se establece en YES durante la instalación o migración, debe tener la autoridad SECADM para crear una máscara de columna. Si SEPARATE_SECURITY está establecido en NO, debe tener la autoridad SECADM o SYSADM.
Acerca de esta tarea
Supongamos que usted es un administrador de seguridad de datos (SECADM) de una organización nacional de salud ( NetHMO ) y responsable de salvaguardar la información confidencial de los pacientes. Desea crear una política de privacidad y seguridad de datos e implementarla a través de máscaras de columna en tablas que están habilitadas con control de acceso de columna. Las definiciones de máscara prescriben las condiciones bajo las cuales los pacientes, médicos, farmacéuticos o administradores de cuentas solo pueden recibir ciertos valores enmascarados de la columna en función de sus roles o ID de autenticación de cuenta.
Procedimiento
Para crear una máscara de columna:
- Emitir la instrucción CREATE TABLE para crear la tabla HOSPITAL.PATIENT
La tabla " HOSPITAL.PATIENT " contiene columnas para registrar el número de la seguridad social (SSN) de un paciente, el ID de autorización de la cuenta (USERID), el nombre (NAME), la dirección (ADDRESS), la farmacia (PHARMACY), el saldo de la cuenta (ACCT_BALANCE) y el médico (PCP_ID), como se muestra a continuación:
CREATE TABLE HOSPITAL.PATIENT (
SSN CHAR(11),
USERID VARCHAR(18),
NAME VARCHAR(128),
ADDRESS VARCHAR(128),
PHARMACY VARCHAR(5000),
ACCT_BALANCE DECIMAL(12,2) WITH DEFAULT,
PCP_ID VARCHAR(18));
- Emite las declaraciones CREATE ROLE para crear los siguientes roles que acceden a la tabla HOSPITAL.PATIENT.
CREATE ROLE PCP;
CREATE ROLE DRUG_RESEARCH;
CREATE ROLE ACCOUNTING;
CREATE ROLE MEMBERSHIP;
CREATE ROLE PATIENT;
- Emite la declaración CREATE MASK para crear máscaras de columna que permitan a cada rol recibir ciertos valores enmascarados de columnas específicas.
Puede utilizar la función integrada VERIFY_TRUSTED_CONTEXT_ROLE_FOR_USER para determinar si el usuario identificado en el registro especial SESSION_USER está asociado a un ROL concreto que se especifica como argumento de entrada de la función.
El siguiente ejemplo muestra cómo se crea la máscara de columna SSN_MASK. Los roles PACIENTE y CONTABILIDAD pueden recibir valores de la columna SSN. Otros roles que accedan a la columna recibirán valores enmascarados.
CREATE MASK NETHMO.SSN_MASK ON HOSPITAL.PATIENT FOR
COLUMN SSN RETURN
CASE WHEN VERIFY_TRUSTED_CONTEXT_ROLE_FOR_USER(SESSION_USER,
'PATIENT') = 1 OR
VERIFY_TRUSTED_CONTEXT_ROLE_FOR_USER(SESSION_USER,
'ACCOUNTING') = 1
THEN SSN
ELSE CHAR('XXX-XX-') || SUBSTR(SSN,8,4)
END
ENABLE;
COMMIT;
Puede emitir las declaraciones CREATE MASK para crear máscaras de columna USERID_MASK, NAME_MASK y ADDRESS_MASK. Las definiciones de todas estas máscaras de columna se almacenan en la nueva tabla de catálogo SYSIBM.SYSCONTROLS.
- Utilice la instrucción ALTER TABLE con la cláusula ACTIVATE COLUMN ACCESS CONTROL para activar el control de acceso a las columnas de la tabla HOSPITAL.PATIENT
ALTER TABLE HOSPITAL.PATIENT ACTIVATE COLUMN ACCESS CONTROL;
COMMIT;
El proceso de serialización ALTER TABLE tiene lugar e invalida todos los paquetes y sentencias dinámicas en caché que hacen referencia a la tabla HOSPITAL.PATIENT. El valor «C» en la nueva columna « SYSTABLES.CONTROL » indica que la tabla está activada para el control de acceso a columnas.
Siempre que se hace referencia a la columna SSN de la tabla HOSPITAL.PATIENT en la cláusula SELECT más externa de una sentencia de manipulación de datos, Db2 aplica implícitamente la máscara de columna SSN_MASK para controlar los valores enmascarados que se devuelven para ella.
Si es necesario, SECADM puede desactivar el control de acceso a las columnas de la tabla HOSPITAL.PATIENT simplemente emitiendo la siguiente instrucción ALTER TABLE:
ALTER TABLE HOSPITAL.PATIENT DEACTIVATE COLUMN ACCESS CONTROL;
COMMIT;
Db2 invalidará todos los paquetes y las sentencias dinámicas en caché que hagan referencia a HOSPITAL.PATIENT. Db2 refleja la eliminación del control de acceso a la columna al dejar en blanco SYSTABLES.CONTROL.