Nascondere il codice Pl/Sql sorgente

Per nascondere il codice PlSql sorgente si possono usare due metodi:

  • Offuscamento dinamico
  • wrap utility

E’ possibile effettuare il wrap di diversi oggetti PlSql al fine di proteggere il codice.
Una volta effettuato il wrap, il codice non può più essere visualizzato tramite viste del data dictionary [ *_SOURCE ].
E’ possibile offuscare questi tipi di oggetti

  • Package specifications
  • Package body
  • Type specification
  • Type body
  • Function
  • Procedure

Esistono comunque alcune utility per poter leggere il codice offuscato, quindi questo metodo non garantisce un alto livello di sicurezza.
Alcune limitazioni sono

  • Mancanza di retrocompatibilità
  • Non funziona con i trigger

Alcune linee guida

  • Se si vuole effettuare il wrap di un package o di un type, agire solo sul body e non sull’header
  • L’operazione di wrap di un file è irreversibile, è necessario essere sicuri di non di dover effettuare ulteriori modifiche prima di procedere all’offuscamento
  • Controllare sempre i file offuscati prima di distribuirli

La Wrap Utility PLSQL prende un file SQL e produce un file di testo equivalente in cui le parti del codice sorgente PLSQL “offuscabili” sono effettivamente offuscate.
L’utility è un file eseguibile lanciabile da linea di comando, sotto è riportato un esempio
wrap iname=input_file [ oname=output_file ]
input_file è il nome del file contenente il codice PLSQL; output_file è il nome del file creato.
L’estensione di default del file di input è .sql, il default per il file di output è .plb.
Il file di output può essere lanciato come script in SQL*Plus
DBMS_DDL
Ci sono due sottoprogrammi per produrre un output offuscato:

  • DBMS_DDL.WRAP
  • DBMS_DDL.CREATE_WRAPPED

DBMS_DDL.WRAP
Questa funzione prende come input uno statement CREATE OR REPLACE che specifica la creazione di package body, function eccetera e restituisce uno statement CREATE OR REPLACE in cui il codice PlSql è offuscato
DBMS_DDL.CREATE_WRAPPED
Questa funzione effettua la stessa operazione della precedente, ma esegue anche lo statement generato.
(Study Guide for 1Z0-144: Oracle Database 11g: Program with PL/SQL: Oracle Certification Prep Paperback) by Matthew Morris

Potrebbero interessarti anche...