Todos os produtos
Search
Central de documentação

Data Management:Sintaxe DSL para regras de segurança

Última atualização: Jul 28, 2026

O Data Management (DMS) oferece uma linguagem específica de domínio (DSL) para definir regras de segurança em fluxos de trabalho de desenvolvimento de banco de dados. Use regras DSL para controlar quais instruções SQL podem ser enviadas, como as aprovações são roteadas e quando as operações devem ser bloqueadas ou sinalizadas como arriscadas.

Como funciona

Uma regra de segurança é uma instrução IF-THEN ou IF-THEN-ELSE. Quando uma condição é atendida, o DMS executa a ação correspondente.

Estrutura básica:

if <condition>
then <action>
end

Estrutura estendida com múltiplas ramificações:

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

Cada regra deve conter exatamente uma condição if. Ela pode ter zero ou mais ramificações elseif e zero ou uma cláusula else. Se nenhuma ramificação corresponder e não houver cláusula else, o DMS não executará nenhuma ação.

Componentes da DSL

Uma regra de segurança consiste em três blocos de construção: cláusulas condicionais, cláusulas de ação e funções predefinidas.

Cláusulas condicionais

Uma cláusula condicional é avaliada como true ou false. Ela é construída a partir de um ou mais dos seguintes elementos:

  • Fatores: variáveis de sistema predefinidas que representam o contexto no momento da avaliação (por exemplo, tipo de instrução SQL, número de linhas afetadas).

  • Operadores: símbolos que comparam ou testam valores.

  • Conectores: AND e OR, que combinam múltiplas expressões.

O operador AND tem prioridade maior que o OR. Ambos possuem prioridade inferior à dos operadores. Use parênteses para substituir a ordem de avaliação padrão.

Exemplo: Em 1 <= 0 or 1 == 1, o DMS avalia 1 <= 0 e 1 == 1 separadamente e, em seguida, aplica o OR. Para tornar a prioridade explícita: (1 <= 0) == true.

Operadores

Os operadores conectam fatores e constantes nas expressões condicionais. Há suporte para os seguintes operadores:

Operador

Descrição

Exemplo

==

Igual a

1 == 1

!=

Diferente de

1 != 2

>

Maior que

@fac.insert_rows > 1000

>=

Maior ou igual a

@fac.insert_rows >= 1000

<

Menor que

@fac.insert_rows < 100

<=

Menor ou igual a

@fac.insert_rows <= 100

in

Pertence a um array

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

not in

Não pertence a um array

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

matchs

Corresponde a uma expressão regular

'idx_aa' matchs 'idx_\\w+'

not matchs

Não corresponde a uma expressão regular

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

isBlank

O valor está vazio

'' isBlank

isNotBlank

O valor não está vazio

'' isNotBlank

Escape de barra invertida em expressões regulares: Para incluir uma barra invertida literal (\) em um padrão regex, faça o escape dela com outra barra invertida. Por exemplo, escreva idx_\\w+ para corresponder a idx_\w+.

Fatores

Fatores são variáveis predefinidas que fornecem contexto durante a avaliação da regra de segurança, como o tipo de instrução SQL, o número de linhas afetadas ou se o alvo é um banco de dados lógico. Use-os nas cláusulas condicionais para criar regras baseadas nos metadados reais da operação.

O nome de um fator usa o formato @fac.<display-name>. O DMS fornece fatores diferentes para pontos de verificação distintos em cada módulo.

Fator

Descrição

@fac.env_type

Tipo de ambiente. Valores de exemplo: DEV, PRODUCT. Consulte Alterar o tipo de ambiente de uma instância.

@fac.sql_type

Tipo de instrução SQL. Valores de exemplo: UPDATE, INSERT.

@fac.detail_type

Tipo de ticket de alteração de dados. Veja os valores válidos abaixo.

@fac.is_logic

Indica se o banco de dados alvo é um banco de dados lógico.

@fac.extra_info

Outras informações do ticket. Não utilizado atualmente.

@fac.is_ignore_affect_rows

Indica se a validação de contagem de linhas deve ser ignorada.

@fac.insert_rows

Número de linhas a serem inseridas.

@fac.update_delete_rows

Número de linhas a serem atualizadas ou excluídas.

@fac.max_alter_table_size

Tamanho do maior tablespace que contém a tabela a ser modificada.

@fac.is_has_security_column

Indica se a instrução SQL envolve campos sensíveis.

@fac.security_column_list

Campos sensíveis envolvidos na instrução SQL.

@fac.risk_level

Nível de risco da operação.

@fac.risk_reason

Motivo do nível de risco atribuído.

@fac.ref_schema_names

Lista de nomes de bancos de dados selecionados no 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

Exemplo: Verificar se uma instrução SQL é do tipo DML:

@fac.sql_type == 'DML'

Cláusulas de ação

Uma ação define o que o DMS faz quando uma condição é atendida. Os nomes das ações usam o formato @act.<display-name>. O DMS fornece ações diferentes para pontos de verificação distintos em cada módulo.

Ação Descrição
@act.allow_submit Exige que as instruções SQL sejam enviadas para execução em um ticket.
@act.allow_execute_direct Permite executar instruções SQL no SQL Console.
@act.forbid_execute Bloqueia a execução de instruções SQL.
@act.mark_risk Marca a operação com um nível de risco e uma mensagem personalizada. Exemplo: @act.mark_risk 'middle' 'Medium risk: online environment'
@act.do_not_approve Especifica o ID de um modelo de aprovação. Consulte Configurar processos de aprovação.
@act.choose_approve_template
@act.choose_approve_template_with_reason

Funções predefinidas

É possível usar funções predefinidas tanto em cláusulas condicionais quanto em cláusulas de ação. Os nomes das funções usam o formato @fun.<display-name>.

Função

Entrada

Saída

Descrição

@fun.concat

Múltiplas strings

String

Concatena strings em uma única string.

@fun.char_length

Uma string

Inteiro

Retorna o comprimento de uma string.

@fun.is_char_lower

Uma string

Booleano

Retorna true se todas as letras forem minúsculas.

@fun.is_char_upper

Uma string

Booleano

Retorna true se todas as letras forem maiúsculas.

@fun.array_size

Um array

Inteiro

Retorna o número de elementos em um array.

@fun.add

Múltiplos valores numéricos

Numérico

Soma múltiplos valores.

@fun.sub

Dois valores numéricos

Numérico

Subtrai o segundo valor do primeiro.

@fun.between

Três valores: alvo, limite inferior, limite superior

Booleano

Retorna true se o alvo estiver dentro do intervalo fechado [inferior, superior]. Suporta tipos NUMERIC, DATE e TIME.

@fun.current_datetime

Nenhuma

String

Retorna a data e hora atuais no formato yyyy-MM-dd HH:mm:ss.

@fun.current_date

Nenhuma

String

Retorna a data atual no formato yyyy-MM-dd.

@fun.current_time

Nenhuma

String

Retorna a hora atual no formato HH:mm:ss.

@fun.is_contain_str

Duas strings

Booleano

Retorna true se a primeira string contiver a segunda.

@fun.listEqualIgnoreOrder

Duas listas de strings

Booleano

Retorna true se ambas as listas contiverem as mesmas strings, independentemente da ordem ou diferenciação entre maiúsculas e minúsculas.

Exemplos selecionados:

Concatenação de strings:

@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

Verificação se um valor numérico está dentro de um intervalo:

@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

Verificação de igualdade 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

Exemplos

Limitar o número de instruções SQL por ticket

Bloqueie o envio se um ticket contiver mais de 1.000 instruções SQL:

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

Se a contagem exceder 1.000, o DMS rejeita o ticket e exibe a mensagem.

Permitir apenas instruções DML

Permita o envio apenas quando todas as instruções SQL forem operações DML:

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