Сокрытие / обфускация кода PL/SQL (WRAP)

Иногда необходимо скрыть (затемнить) наш исходный код PL/SQL. Эту утилиту следует использовать с осторожностью, речь идет не о сокрытии всего доступного кода, а только того, который по соображениям безопасности не должен передаваться третьим лицам.
Используемый метод традиционно реализовывался с помощью инструмента WRAP, который мы подробно описываем в этой статье, и, начиная с версии 10g R2, можно выполнить это действие с помощью пакета DBMS_DDL.WRAP, о котором мы поговорим в другой статье.
Важно знать некоторые его ограничения перед применением, особенно в производственных средах, и очень важно иметь копию кода PL/SQL и контроль версий перед применением метода «wrap» к нашему коду.

Основные ограничения утилиты WRAP заключаются в следующем:

Зашифрованные файлы, в которых мы использовали wrap, не совместимы между выпусками Oracle Databases.
Нельзя использовать wrap в коде триггеров.
Небезопасно для защиты паролей или имен таблиц.
Не обнаруживает синтаксические проблемы или ошибки кода, сгенерированные в нашем незашифрованном коде.
Запутываемый код длиннее оригинального.
Wrap запутывает только тело package тип, но не его спецификацию.

Чтобы увидеть, как это работает, давайте создадим довольно простую функцию, которую позже затемним с помощью wrap.

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;
/

Проверяем, что она работает:


select dia_de_hoy from dual;

DIA_DE_HOY
——————–
31-AGO-2023 20:47:53

Копируем код нашей функции в операционную систему.

[oracle@oracleconraul u01]$ cat funcion_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@localhost 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 and/or 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 и т. д.).

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





Tags:
Oracle ACE Associate