Todos los productos
Search
Centro de documentos

Data Management:Sintaxis DSL para reglas de seguridad

Última actualización: Sep 03, 2026

Data Management (DMS) ofrece un lenguaje específico de dominio (DSL) para definir reglas de seguridad en los flujos de trabajo de desarrollo de bases de datos. Utilice las reglas DSL para controlar qué sentencias SQL se pueden enviar, cómo se enrutan las aprobaciones y cuándo se bloquean o marcan operaciones como riesgosas.

Funcionamiento

Una regla de seguridad es una sentencia IF-THEN o IF-THEN-ELSE. Cuando se cumple una condición, DMS ejecuta la acción correspondiente.

Estructura básica:

if <condition>
then <action>
end

Estructura extendida con varias ramas:

if <condition 1>
then <action 1>
elseif <condition 2>
then <action 2>
[else <action 3>]
end

Cada regla debe contener exactamente una condición if. Puede tener cero o más ramas elseif y cero o una cláusula else. Si ninguna rama coincide y no existe una cláusula else, DMS no realiza ninguna acción.

Componentes del DSL

Una regla de seguridad consta de tres bloques fundamentales: cláusulas condicionales, cláusulas de acción y funciones predefinidas.

Cláusulas condicionales

Una cláusula condicional se evalúa como true o false. Se construye a partir de uno o varios de los siguientes elementos:

  • Factores: variables predefinidas del sistema que representan el contexto en el momento de la evaluación (por ejemplo, tipo de sentencia SQL, número de filas afectadas).

  • Operadores: símbolos que comparan o prueban valores.

  • Conectores: AND y OR, que combinan múltiples expresiones.

AND tiene mayor prioridad que OR. Ambos tienen menor prioridad que los operadores. Use paréntesis para modificar el orden de evaluación predeterminado.

Ejemplo: En 1 <= 0 or 1 == 1, DMS evalúa 1 <= 0 y 1 == 1 por separado, y luego aplica OR. Para hacer explícita la prioridad: (1 <= 0) == true.

Operadores

Los operadores conectan factores y constantes en las expresiones condicionales. Se admiten los siguientes operadores:

Operador

Descripción

Ejemplo

==

Igual a

1 == 1

!=

Distinto de

1 != 2

>

Mayor que

@fac.insert_rows > 1000

>=

Mayor o igual que

@fac.insert_rows >= 1000

<

Menor que

@fac.insert_rows < 100

<=

Menor o igual que

@fac.insert_rows <= 100

in

Pertenece a un arreglo

'a' in ['a', 'b', 'c']

not in

No pertenece a un arreglo

'a' not in ['a', 'b', 'c']

matchs

Coincide con una expresión regular

'idx_aa' matchs 'idx_\\w+'

not matchs

No coincide con una expresión regular

'idx_aa' not matchs 'idx_\\w+'

isBlank

El valor está vacío

'' isBlank

isNotBlank

El valor no está vacío

'' isNotBlank

Escape de barra invertida en expresiones regulares: Para incluir una barra invertida literal (\) en un patrón regex, escápela con otra barra invertida. Por ejemplo, escriba idx_\\w+ para que coincida con idx_\w+.

Factores

Los factores son variables predefinidas que proporcionan contexto durante la evaluación de la regla de seguridad, como el tipo de sentencia SQL, el número de filas afectadas o si el destino es una base de datos lógica. Úselos en cláusulas condicionales para escribir reglas basadas en metadatos reales de la operación.

El nombre de un factor utiliza el formato @fac.<display-name>. DMS proporciona diferentes factores para distintos puntos de control en cada módulo.

Factor

Descripción

@fac.env_type

Tipo de entorno. Valores de ejemplo: DEV, PRODUCT. Consulte Cambiar el tipo de entorno de una instancia.

@fac.sql_type

Tipo de sentencia SQL. Valores de ejemplo: UPDATE, INSERT.

@fac.detail_type

Tipo de ticket de cambio de datos. Consulte los valores válidos a continuación.

@fac.is_logic

Indica si la base de datos destino es una base de datos lógica.

@fac.extra_info

Otra información del ticket. No se utiliza actualmente.

@fac.is_ignore_affect_rows

Indica si se omite la validación del recuento de filas.

@fac.insert_rows

Número de filas por insertar.

@fac.update_delete_rows

Número de filas por actualizar o eliminar.

@fac.max_alter_table_size

Tamaño del espacio de tablas más grande que contiene la tabla por modificar.

@fac.is_has_security_column

Indica si la sentencia SQL involucra campos sensibles.

@fac.security_column_list

Campos sensibles involucrados en la sentencia SQL.

@fac.risk_level

Nivel de riesgo de la operación.

@fac.risk_reason

Motivo del nivel de riesgo asignado.

@fac.ref_schema_names

Lista de nombres de bases de datos seleccionados en el ticket.

Valores válidos para @fac.detail_type:

Valor

Tipo de ticket

COMMON

Normal Data Modify

CHUNK_DML

Lockless Change

PROCEDURE

Programmable Object

CRON_CLEAR_DATA

History Data Clean

BIG_FILE

Large Data Import

Ejemplo: Comprobar si una sentencia SQL es de tipo DML:

@fac.sql_type == 'DML'

Cláusulas de acción

Una acción define lo que hace DMS cuando se cumple una condición. Los nombres de las acciones utilizan el formato @act.<display-name>. DMS proporciona diferentes acciones para distintos puntos de control en cada módulo.

Acción Descripción
@act.allow_submit Requiere que el envío de sentencias SQL se ejecute dentro de un ticket.
@act.allow_execute_direct Permite la ejecución de sentencias SQL en SQL Console.
@act.forbid_execute Bloquea la ejecución de sentencias SQL.
@act.mark_risk Marca la operación con un nivel de riesgo y un mensaje personalizado. Ejemplo: @act.mark_risk 'middle' 'Medium risk: online environment'
@act.do_not_approve Especifica el ID de una plantilla de aprobación. Consulte Configurar procesos de aprobación.
@act.choose_approve_template
@act.choose_approve_template_with_reason

Funciones predefinidas

Las funciones predefinidas se pueden usar tanto en cláusulas condicionales como en cláusulas de acción. Los nombres de las funciones utilizan el formato @fun.<display-name>.

Función

Entrada

Salida

Descripción

@fun.concat

Varias cadenas

Cadena

Concatena cadenas en una sola.

@fun.char_length

Una cadena

Entero

Devuelve la longitud de una cadena.

@fun.is_char_lower

Una cadena

Booleano

Devuelve true si todas las letras son minúsculas.

@fun.is_char_upper

Una cadena

Booleano

Devuelve true si todas las letras son mayúsculas.

@fun.array_size

Un arreglo

Entero

Devuelve el número de elementos en un arreglo.

@fun.add

Varios valores numéricos

Numérico

Suma varios valores.

@fun.sub

Dos valores numéricos

Numérico

Resta el segundo valor del primero.

@fun.between

Tres valores: objetivo, límite inferior, límite superior

Booleano

Devuelve true si el objetivo cae dentro del rango cerrado [inferior, superior]. Admite tipos NUMERIC, DATE y TIME.

@fun.current_datetime

Ninguna

Cadena

Devuelve la fecha y hora actuales en formato yyyy-MM-dd HH:mm:ss.

@fun.current_date

Ninguna

Cadena

Devuelve la fecha actual en formato yyyy-MM-dd.

@fun.current_time

Ninguna

Cadena

Devuelve la hora actual en formato HH:mm:ss.

@fun.is_contain_str

Dos cadenas

Booleano

Devuelve true si la primera cadena contiene la segunda.

@fun.listEqualIgnoreOrder

Dos listas de cadenas

Booleano

Devuelve true si ambas listas contienen las mismas cadenas, sin importar el orden ni las mayúsculas/minúsculas.

Ejemplos seleccionados:

Concatenación de cadenas:

@fun.concat('d', 'm', 's')
// Output: 'dms'
@fun.concat('[Development standards] Enter a comment for the [', @fac.column_name, '] field.')
// Output: a reminder message with the field name inserted

Comprobación de si un valor numérico cae dentro de un rango:

@fun.between(@fac.export_rows, 2001, 100000)
// Returns true if the number of exported rows is between 2,001 and 100,000
@fun.between(@fun.current_datetime(), '2019-10-31 00:00:00', '2019-11-04 00:00:00')
// Returns true if the current date and time fall within the specified window

Comprobación de igualdad de listas:

@fun.listEqualIgnoreOrder(@fac.perm_type, ['QUERY'])
// Returns true if only the query permission is requested
@fun.listEqualIgnoreOrder(@fac.perm_type, ['CORRECT', 'EXPORT'])
// Returns true if both the change and export permissions are requested

Ejemplos

Limitar el número de sentencias SQL por ticket

Bloquee el envío si un ticket contiene más de 1,000 sentencias SQL:

if
    @fac.sql_count > 1000
then
    @act.reject_execute 'The number of SQL statements in a ticket cannot exceed 1,000.'
end

Si el recuento supera 1,000, DMS rechaza el ticket y muestra el mensaje.

Permitir solo sentencias DML

Permita el envío únicamente cuando todas las sentencias SQL sean operaciones DML:

if
    @fac.sql_type in ['UPDATE', 'DELETE', 'INSERT', 'INSERT_SELECT']
then
    @act.allow_submit
end