Use DBMS_ASSERT

As entradas provenientes do cliente que compõem um Dynamic SQL, que não usa bind variables, sempre deverão ser tratadas como algo potencialmente perigoso, e sempre deverão ser validadas para impedir o SQL Injection(Em breve farei um post sobre este assunto).

Para auxiliar este trabalho, o Oracle tem uma package DBMS_ASSERT para fazer essas validações. Essa package tem algumas functions, e a maioria dessas functions retorna o mesmo parâmetro que foi passado, mas fazendo a validação. Caso algo esteja errado com o parâmetro um erro será lançado, o VALUE_ERROR.

A functions mais utilizadas dessa package serão descritas aqui no post. Começando pelo ENQUOTE_LITERAL. Essa function retorna a string literal entre aspas simples. Já a function ENQUOTE_NAME coloca o parâmetro do tipo string de entrada entre aspas duplas. Veja o uso abaixo:


[oracle@ora01:orcl1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Tue May 29 08:58:37 2018

Copyright (c) 1982, 2014, Oracle. All rights reserved.

Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> SELECT DBMS_ASSERT.ENQUOTE_LITERAL('TESTE') FROM DUAL;

DBMS_ASSERT.ENQUOTE_LITERAL('TESTE')
--------------------------------------------------------------------------------
'TESTE'

SQL> SELECT DBMS_ASSERT.ENQUOTE_NAME('TESTE DE ENQUOTE_NAME') FROM DUAL;

DBMS_ASSERT.ENQUOTE_NAME('TESTEDEENQUOTE_NAME')
--------------------------------------------------------------------------------
"TESTE DE ENQUOTE_NAME"

SQL>

O uso das functions são bem simples. Elas poderão ser utilizadas na hora de concatenar as strings que irão compor o statement, assim os parâmetros de entrada serão validados. Mas quando possível, recomendo o uso de bind variables com NDS, isto pode ser visto aqui no blog na parte de Dynamic SQL.

Outra function que poderá ter o seu uso é a SCHEMA_NAME que verifica se o parâmetro é um schema válido, retornando novamente o mesmo parâmetro de entrada caso seja valido ou então o erro VALUE_ERROR. Temos também a function SQL_OBJECT_NAME, que verifica se é um objeto SQL válido.

Anúncios

Meu nome é Tércio Costa, sou formado em Ciências da Computação pela UFPB, tenho a certificação Oracle SQL Expert, mantendo um blog reconhecido pela OTN(oraclepress.wordpress.com), no qual também publico artigos técnicos no portal OTN, no portal http://www.profissionaloracle.com.br/gpo e na revista SQL Magazine. Além de tudo isto sou um Oracle ACE Associate por estar sempre contribuindo para a comunidade com um bom nível de expertise.

Marcado com:
Publicado em Sem categoria

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Esse Blog é reconhecido pela
Certificações
Sou articulista
Sou articulista

Clique para seguir este blog e receber notificações via email de novos posts.

Tércio Costa

Tércio Costa

Meu nome é Tércio Costa, sou formado em Ciências da Computação pela UFPB, tenho a certificação Oracle SQL Expert, mantendo um blog reconhecido pela OTN(oraclepress.wordpress.com), no qual também publico artigos técnicos no portal OTN, no portal http://www.profissionaloracle.com.br/gpo e na revista SQL Magazine. Além de tudo isto sou um Oracle ACE Associate por estar sempre contribuindo para a comunidade com um bom nível de expertise.

Links Pessoais

Serviços verificados

Visualizar Perfil Completo →

Total de Visualizações da Página
  • 94.021 Visualizações
%d blogueiros gostam disto: