Creación de máscaras de columna

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

Iniciar información de la interfaz de programación de uso general.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:

  1. 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));
  2. 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;
  3. 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.

  4. 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.Finalizar la información de la interfaz de programación de uso general.