sintaxis sintactico ejemplos concreta compiladores arbol analizador abstracto oracle syntax plsql

oracle - concreta - arbol sintactico abstracto ejemplos



¿Cómo accedo al AST(árbol de sintaxis abstracta) para un procedimiento almacenado PL/SQL? (2)

Hay un paquete indocumentado DUMPDIANA que está destinado a volcar el Diana en un formato legible para los humanos.

El archivo $ ORACLE_HOME / rdbms / admin / dumpdian.sql dice "La documentación está disponible en /vobs/plsql/notes/dumpdiana.txt". No puedo encontrar ese archivo, y sin él solo podemos adivinar el significado de algunos parámetros. El uso básico de DUMPDIANA es el siguiente:

SQL> show user USER is "SYS" SQL> @?/rdbms/admin/dumpdian Library created. Package created. Package body created. create or replace procedure hello_world 2 as 3 begin 4 dbms_output.put_line(''hello world''); 5* end; Procedure created. SQL> set serveroutput on SQL> execute sys.DUMPDIANA.dump(''HELLO_WORLD''); user: SYS PL/SQL procedure successfully completed.

En este punto, se debería haber creado un par de archivos en la carpeta $ORACLE_BASE/diag/rdbms/orcl12c/orcl12c/trace . Los dos archivos parecen seguir la convención de nomenclatura:

orcl12c_ora_{PROCESS}.trc orcl12c_ora_{PROCESS.trm

Donde el archivo trc es una versión legible para humanos del archivo trm correspondiente, y {PROCESS} es el ID del proceso del sistema operativo. Para encontrar esto, use la siguiente consulta de la misma sesión:

select p.spid from v$session s,v$process p where s.paddr = p.addr and s.sid = sys_context(''USERENV'',''SID'');

Por ejemplo, si el ID de la sesión fue 8861, entonces desde un shell bash puedes ver los resultados usando:

vim $ORACLE_BASE/diag/rdbms/orcl12c/orcl12c/trace/orcl12c_ora_8861.trc

El resultado es interesante ... ¡si no particularmente intuitivo! Por ejemplo, aquí hay un fragmento del archivo producido. Tenga en cuenta el literal de cadena HELLO_WORLD.

PD1(2):D_COMP_U [ L_SRCPOS : row 1 col 1 A_CONTEX : PD2(2): D_CONTEX [ L_SRCPOS : row 1 col 1 AS_LIST : < > ] A_UNIT_B : PD3(2): D_S_BODY [ L_SRCPOS : row 1 col 1 A_D_ : PD4(2): DI_PROC [ L_SRCPOS : row 1 col 11 L_SYMREP : HELLO_WORLD, S_SPEC : PD5^(2), S_BODY : PD8^(2),

Un par de notas. He ejecutado esto como SYS, que como sabemos no es una buena práctica, esta no es una razón por la que sepa por qué no debe otorgar privilegios a DUMPDIANA a un usuario normal. Todos los procedimientos que vayas van al mismo archivo; si eliminas ese archivo, deja de funcionar y tendrás que iniciar una nueva sesión. Si deja de funcionar, iniciar una nueva sesión a veces parece solucionar el problema.

Cuando Oracle compila un procedimiento almacenado, almacena el AST para el procedimiento en formato DIANA.

  • ¿cómo puedo acceder a este AST?
  • ¿Hay herramientas integradas para procesar este AST?

Aquí hay un excelente tutorial sobre DIANA e IDL en el PDF Cómo desenvolver PL / SQL de Pete Finnigan, consultor principal de Siemens en el momento de la redacción, especializado en investigar y proteger las bases de datos de Oracle.

Entre otras cosas muy interesantes aprenderás que:

  • DIANA está anotado como IDL (Lenguaje de definición de interfaz).
  • Las 4 tablas en las que se almacena el IDL (IDL_CHAR $, IDL_SB4 $, IDL_UB1 $ e IDL_UB2 $)
  • Wrapper PL / SQL es simplemente DIANA anotado como IDL.
  • Dumpdiana no está instalado por defecto, debe asegurarse de que los paquetes DIANA, PIDL y DIUTIL PL / SQL también estén instalados y debe ejecutarlo como SYS.
  • Cómo volcar el árbol DIANA y entenderlo.
  • Cómo reconstruir la fuente PL / SQL de DIANA.
  • Cómo escribir un desenlazador PL / SQL.
  • Limitaciones de un UN-wrapper basado en API PL / SQL.
  • Limitaciones de la API PL / SQL en sí.
  • Cómo enumerar nodos y atributos DIANA.
  • Una prueba de concepto un-wrapper.

Puedes encontrar su sitio web aquí . Hay tanto contenido allí. Encontrará excelentes artículos sobre la seguridad de Oracle y también muchas herramientas de seguridad útiles desarrolladas no solo por él, sino también por otros autores.

Lo mejor de todo es que puedes ponerte en contacto con él si después de la lectura todavía tienes preguntas.