T3.2: Manages SQL Security

Knowledge Review - InterSystems IRIS SQL Specialist

1. Asigna privilegios SQL a usuarios y roles (GRANT/REVOKE)

Puntos Clave

  • Comando GRANT: Asigna privilegios administrativos u de objeto a usuarios o roles
  • Comando REVOKE: Remueve privilegios previamente otorgados de usuarios o roles
  • Privilegios administrativos: Derechos específicos de namespace para crear, alterar, eliminar objetos (ej., %CREATE_TABLE, %ALTER_TABLE, %DROP_VIEW)
  • Privilegios de objeto: Derechos de acceso específicos a tablas, vistas, procedimientos almacenados (%ALTER, DELETE, SELECT, INSERT, UPDATE, EXECUTE, REFERENCES)
  • Privilegios a nivel de columna: Control granular permitiendo acceso a columnas específicas en lugar de tablas enteras
  • WITH GRANT OPTION: Permite a otorgados otorgar los mismos privilegios a otros usuarios, creando permisos en cascada

Notas Detalladas

Resumen

La seguridad SQL de InterSystems IRIS opera a través de un sistema de privilegios completo gestionado principalmente vía comandos GRANT y REVOKE.

  • Comando GRANT: Asigna privilegios a usuarios o roles, habilitando operaciones específicas de base de datos
  • Alcance de privilegio: Otorgado sobre base por-namespace, inmediatamente ejercitables
  • Múltiples otorgamientos: Múltiples usuarios pueden otorgar el mismo privilegio; un solo REVOKE lo remueve completamente

Privilegios Administrativos

Los privilegios administrativos son específicos de namespace e incluyen derechos para crear, alterar, y eliminar objetos de base de datos:

  • Tablas, vistas, triggers, y procedimientos
  • %DB_OBJECT_DEFINITION: Otorga los 16 privilegios de definición de datos en un solo comando

Privilegios administrativos especiales:

  • %NOCHECK, %NOINDEX, %NOLOCK, %NOTRIGGER: Controlan si usuarios pueden aplicar estas restricciones de keyword durante INSERT, UPDATE, o DELETE
  • Nota: TRUNCATE TABLE requiere privilegio %NOTRIGGER

Privilegios de Objeto

Los privilegios de objeto proporcionan acceso a objetos específicos de base de datos incluyendo tablas, vistas, procedimientos almacenados, y cubos.

Privilegios de objeto a nivel de tabla:

  • %ALTER, DELETE, SELECT, INSERT, UPDATE, EXECUTE, REFERENCES, CANCEL
  • Otorgan acceso a todas las columnas en tabla o vista, incluyendo columnas agregadas subsecuentemente

Privilegios a nivel de columna:

  • Pueden asignarse a columnas específicas solo para control más granular

Otorgamientos wildcard y de esquema:

  • Asterisco (*): Otorga privilegios a todos los objetos en namespace actual
  • Keyword SCHEMA: Otorga privilegios a todos los objetos dentro de un esquema nombrado, incluyendo objetos futuros

WITH GRANT OPTION

  • Habilita delegación de privilegio
  • Permite a otorgados otorgar los mismos privilegios a otros usuarios
  • REVOKE con CASCADE puede revertir serie en cascada de privilegios otorgados

Métodos para Otorgar Privilegios

  • Sentencias SQL GRANT
  • Métodos ObjectScript: `$SYSTEM.SQL.Security.GrantPrivilege()`
  • Interfaz del Management Portal

Propiedad de Objeto

El propietario de un objeto SQL automáticamente retiene todos los privilegios sobre ese objeto en todos los namespaces a los cuales el objeto está mapeado.

2. Comprende verificación de privilegio SQL versus seguridad de aplicación

Puntos Clave

  • Interfaces de verificación de privilegio: Privilegios SQL aplicados solo a través de ODBC, JDBC, Dynamic SQL, y SQL Shell
  • Exención de Embedded SQL: No realiza verificación de privilegio; asume controles de seguridad a nivel de aplicación
  • Invocación de consulta de clase: Llamadas directas de consulta de clase sin objetos %SQL.Statement evitan verificaciones de privilegio SQL
  • SQL versus privilegios de sistema: Privilegios SQL más granulares que protecciones a nivel de sistema; pueden apuntar tablas, vistas, columnas específicas
  • Otorgamiento de privilegio implícito: Retener privilegio SQL automáticamente otorga privilegios de sistema relacionados necesarios para la acción SQL
  • Roles compartidos a través de modelos: Un solo rol puede incluir tanto privilegios SQL como a nivel de sistema

Notas Detalladas

Resumen

InterSystems IRIS implementa un modelo de seguridad de capa dual que distingue entre verificación de privilegio SQL y seguridad a nivel de aplicación.

  • Propósito: Diferentes patrones de acceso tienen diferentes requisitos de seguridad y modelos de confianza
  • Conocimiento crítico: Comprender cuándo y dónde ocurre verificación de privilegio es esencial para diseñar aplicaciones de base de datos seguras

Aplicación de Verificación de Privilegio SQL

La verificación de privilegio SQL se aplica exclusivamente a través de interfaces específicas:

  • Conexiones ODBC
  • Conexiones JDBC
  • Dynamic SQL (objetos %SQL.Statement)
  • Interfaz SQL Shell

Comportamiento:

  • Validación completa de privilegio antes de permitir cualquier operación
  • SQLCODE -99: Error Privilege Violation si el usuario carece de privilegio requerido
  • Asegura que acceso externo a base de datos y consultas SQL interactivas respeten límites de seguridad

Interfaces Que Evitan Verificación de Privilegio

Embedded SQL:

  • Deliberadamente no realiza verificación de privilegio
  • Asume que aplicaciones implementarán sus propios controles de seguridad
  • Típicamente usado dentro de rutinas ObjectScript donde lógica de aplicación controla acceso

Invocación directa de consulta de clase:

  • Sin objetos %SQL.Statement se considera acceso de aplicación
  • Evita verificaciones de privilegio SQL
  • Permite a desarrolladores construir modelos de seguridad personalizados

SQL vs. Privilegios de Sistema

La relación entre privilegios SQL y privilegios a nivel de sistema es asimétrica:

  • Privilegio SQL otorga acceso de sistema: Retener privilegio SQL implícitamente otorga privilegios de sistema relacionados requeridos para la acción SQL
  • Privilegios de sistema NO otorgan acceso SQL: Privilegios a nivel de sistema no implican automáticamente privilegios SQL a nivel de tabla u objeto
  • Granularidad: Las protecciones SQL son más granulares, permitiendo privilegios para tablas, vistas, columnas, y procedimientos almacenados específicos

Roles:

  • Sirven como puente entre ambos modelos de seguridad
  • Un solo rol puede incluir tanto privilegios SQL como a nivel de sistema
  • Compartido entre ambos subsistemas de seguridad

Configuración del Sistema SQLSecurity

El límite de aplicación puede controlarse a nivel de sistema:

  • Método: `$SYSTEM.SQL.Util.SetOption("SQLSecurity")`
  • Valor 0: Deshabilita SQL Security para nuevos procesos (suprime seguridad de tabla/vista basada en privilegio)
  • Valor 1 (predeterminado): Aplicación de privilegio habilitada (recomendado para producción)

3. Habilita y comprende el impacto de auditoría SQL

Puntos Clave

  • Tres tipos de evento de auditoría: EmbeddedStatement, DynamicStatement, y XDBCStatement (ODBC/JDBC)
  • Habilitación de dos pasos: Habilitar evento de auditoría del sistema Y agregar directiva de código o usar interfaz auditable
  • Auditoría Embedded SQL: Requiere evento %System/%SQL/EmbeddedStatement habilitado Y directiva #sqlcompile audit en código
  • Auditoría Dynamic SQL: Automática cuando evento %System/%SQL/DynamicStatement está habilitado para todas las ejecuciones %SQL.Statement
  • Datos de auditoría capturados: Texto de sentencia SQL, valores de parámetro, usuario, timestamp, ID de proceso, y tipo de sentencia
  • Auditoría de fallo de privilegio: Evento %System/%SQL/PrivilegeFailure registra errores SQLCODE -99 cuando verificaciones de privilegio fallan

Notas Detalladas

Resumen

InterSystems IRIS proporciona capacidades completas de auditoría SQL que registran ejecución de sentencia SQL para cumplimiento, monitoreo de seguridad, y propósitos de solución de problemas.

  • Mecanismo: Opera a través de la Audit Database del sistema
  • Contenido: Registra información detallada sobre operaciones SQL a través de diferentes interfaces de ejecución

Tipos de Evento de Auditoría

La auditoría SQL soporta tres tipos de evento distintos:

  • %System/%SQL/EmbeddedStatement: Audita sentencias Embedded SQL dentro de rutinas ObjectScript
  • %System/%SQL/DynamicStatement: Audita operaciones Dynamic SQL a través de objetos %SQL.Statement
  • %System/%SQL/XDBCStatement: Audita sentencias SQL ejecutadas a través de conexiones ODBC y JDBC

Nota: Cada tipo de evento está deshabilitado por defecto; debe habilitarse vía Management Portal: System Administration > Security > Auditing > Configure System Events

Auditoría Embedded SQL (Habilitación de Dos Pasos)

1. Habilitar evento del sistema: %System/%SQL/EmbeddedStatement 2. Agregar directiva de código: Directiva de preprocesador `#sqlcompile audit` en rutinas conteniendo Embedded SQL

  • Establecer a ON causa que Embedded SQL siguiente genere registros de auditoría
  • Da control de grano fino sobre qué rutinas son auditadas
  • Evita sobrecarga de rendimiento en operaciones no sensibles

Auditoría Dynamic SQL

  • Implementación más simple: Cuando evento %System/%SQL/DynamicStatement está habilitado, el sistema automáticamente audita cada ejecución %SQL.Statement
  • No se requieren cambios de código: Aplica a todas las operaciones Dynamic SQL a nivel de sistema
  • Mejor para: Monitorear acceso externo o consultas interactivas requiriendo cobertura completa

Contenido de Registro de Auditoría

La Audit Database almacena:

  • Timestamp (hora local)
  • Nombre de usuario
  • ID de Proceso (PID)
  • Descripción especificando tipo de sentencia (ej., "SQL SELECT Statement")
  • Event Data (vía enlace Details): Sentencia SQL completa y valores de argumento/parámetro de entrada
  • Longitud máxima Event Data: 3,632,952 caracteres para Dynamic SQL (sentencias más largas truncadas)

Auditoría de Fallo de Privilegio

  • Evento: %System/%SQL/PrivilegeFailure
  • Registros: Cada error SQLCODE -99 (Privilege Violation)
  • Propósito: Detectar intentos de acceso no autorizado, identificar errores de configuración de permiso, mantener trazas de auditoría de seguridad
  • Estado: Deshabilitado por defecto; debe habilitarse explícitamente

Consideraciones de Rendimiento

  • Auditoría Embedded SQL: Minimiza sobrecarga con directivas #sqlcompile selectivas
  • Auditoría Dynamic SQL y XDBC: Puede introducir latencia medible en entornos de alta transacción
  • Balance: Requisitos de cobertura de auditoría contra consideraciones de rendimiento

Resumen de Preparación para el Examen

Conceptos Críticos a Dominar:

  1. Sintaxis GRANT/REVOKE: Comprender la sintaxis para otorgar privilegios administrativos, privilegios de objeto, roles, y privilegios a nivel de columna
  2. Tipos de Privilegio: Diferenciar entre privilegios administrativos (%CREATE_TABLE, %ALTER_TABLE) y privilegios de objeto (SELECT, INSERT, UPDATE, DELETE, EXECUTE)
  3. Alcance de Aplicación de Privilegio: Saber qué interfaces aplican privilegios SQL (ODBC, JDBC, Dynamic SQL, SQL Shell) versus cuáles los evitan (Embedded SQL, consultas directas de clase)
  4. WITH GRANT OPTION: Comprender otorgamientos de privilegio en cascada y palabras clave CASCADE/RESTRICT para REVOKE
  5. Tipos de Evento de Auditoría: Distinguir entre eventos de auditoría EmbeddedStatement, DynamicStatement, XDBCStatement, y PrivilegeFailure
  6. Habilitación de Auditoría: Saber proceso de dos pasos para auditoría Embedded SQL versus auditoría Dynamic SQL automática
  7. Nivel de Columna vs. Nivel de Tabla: Comprender cuándo usar privilegios a nivel de columna para control de acceso granular

Escenarios Comunes de Examen:

  • Otorgar privilegio SELECT sobre tabla específica a usuario
  • Otorgar todos los privilegios sobre esquema a rol
  • Revocar privilegios con CASCADE para remover otorgamientos delegados
  • Identificar si verificación de privilegio ocurre para interfaz SQL dada
  • Habilitar auditoría SQL para sentencias Dynamic SQL
  • Solucionar errores de violación de privilegio SQLCODE -99
  • Comprender diferencia entre privilegios SQL y recursos a nivel de sistema

Recomendaciones de Práctica Práctica:

  • Practicar comandos GRANT y REVOKE con diferentes tipos y alcances de privilegio
  • Crear roles y asignar múltiples privilegios para probar herencia de privilegio
  • Probar aplicación de privilegio ejecutando SQL a través de diferentes interfaces (ODBC vs Embedded SQL)
  • Habilitar eventos de auditoría SQL y revisar registros de auditoría en Management Portal
  • Usar %CHECKPRIV para verificar asignaciones de privilegio
  • Otorgar privilegios a nivel de columna y probar comportamiento INSERT sobre columnas restringidas
  • Experimentar con WITH GRANT OPTION y revocación CASCADE

Report an Issue