Иногда возникает необходимость скрыть (обфусцировать) исходный код PL/SQL, особенно в целях безопасности, когда, например, мы предоставляем свой код третьим лицам, для чего традиционно используется инструмент WRAP, о котором мы подробно рассказываем в этой статье. Начиная с версии 10g R2, это действие можно выполнить с помощью пакета DBMS_DDL.WRAP, о котором мы расскажем в другой статье.
Перед применением этого инструмента, особенно в продуктивных средах, важно знать некоторые его ограничения, причем очень важно иметь копию PL/SQL-кода и контроль его версии, прежде чем применять метод "обертывания" в нашем коде.
В основном, ограничения утилиты WRAP заключаются в следующем:
Los ficheros ofuscados, en aquellos donde hemos usado wrap, no son compatibles entre releases de Oracle Databases.
No se puede usar wrap en código de triggers.
No es seguro para securizar password o nombres de tablas.
No detecta problemas de sintaxis o errores de código, generados en nuestro código sin ofuscar.
El código ofuscado es más largo que el original.
Wrap solamente ofusca el body de un package o el type, pero no su especificación.
Чтобы посмотреть, как это работает, создадим простую функцию, которую замаскируем с помощью wrap.
CREATE OR REPLACE FUNCTION dia_today_day RETURN VARCHAR2 AS
BEGIN
RETURN TO_CHAR(SYSDATE, 'DD-MON-YYYYYY HH24:MI:SS');
END dia_today;
/.
Проверяем корректность работы функции:
select today_day from dual;
today_day
-------
31-AUG-2023 20:47:53
Мы копируем код нашей функции в операционную систему.
[oracle u01]$ catfuncion_dia_de_hoy.sql
CREATE OR REPLACE FUNCTION dia_de_hoy RETURN VARCHAR2 AS
BEGIN
RETURN TO_CHAR(SYSDATE, ‘DD-MON-YYYY HH24:MI:SS’);
END dia_de_hoy;
/
Перед применением обфускации мы проверяем в SQL-Developer, что наша функция выглядит как обычно.

В операционной системе мы запускаем команду для обфускации кода PL-SQL.
La sintaxis es:
wrap iname=<fichero entrada> oname=<fichero de salida ofuscado>
[oracle u01]$ wrap iname=funcion_dia_de_hoy.sql oname=funcion_dia_de_hoy.out
PL/SQL Wrapper: Release 19.0.0.0.0 – Production on Thu Aug 31 21:17:23 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle its affiliates. All rights reserved.
Processing funcion_dia_de_hoy.sql to funcion_dia_de_hoy.out
Утилита сообщит обфусцированный код для выполнения.
CREATE OR REPLACE FUNCTION dia_de_hoy wrapped
a000000
1
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
abcd
8
74 b6
LH4SgLm3AMbYAySR+WVH9QmeSoAwg8eZgcfLCNL+Xlr6WV+uofByhWTD58CyvbKbXufHdMAz
uHRlCbh0i8DAMv7ShgmpoQLOxtYaIazv1kx2hHEyjndMcfUQc3P17zdnr2pqhduXsevFV1RM
66tN+j1y6a+V638ZlSoZaiQl7Pumz30sVg==
/.
Скопируйте код и запустите его (SqlPlus, SqlDeveloper и т.д.).

С этого момента все новые сессии, подключающиеся к базе данных, не будут иметь доступа к коду в читаемом виде, а сам код будет скрыт от пользователей.





