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.
Referencias de Documentación
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)
Referencias de Documentació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
Referencias de Documentación
Resumen de Preparación para el Examen
Conceptos Críticos a Dominar:
- Sintaxis GRANT/REVOKE: Comprender la sintaxis para otorgar privilegios administrativos, privilegios de objeto, roles, y privilegios a nivel de columna
- Tipos de Privilegio: Diferenciar entre privilegios administrativos (%CREATE_TABLE, %ALTER_TABLE) y privilegios de objeto (SELECT, INSERT, UPDATE, DELETE, EXECUTE)
- 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)
- WITH GRANT OPTION: Comprender otorgamientos de privilegio en cascada y palabras clave CASCADE/RESTRICT para REVOKE
- Tipos de Evento de Auditoría: Distinguir entre eventos de auditoría EmbeddedStatement, DynamicStatement, XDBCStatement, y PrivilegeFailure
- Habilitación de Auditoría: Saber proceso de dos pasos para auditoría Embedded SQL versus auditoría Dynamic SQL automática
- 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