ORA-20000: ERROR: Grants from 127.0.0.1 not allowed
ORA-06512: at line 8
Триггеры на события базы данных
Триггеры на события базы данных запускаются при возникновении событий уровня базы данных. В Oracle 12c восемь таких типов событий, перечислим некоторые из них:
STARTUP – открытие базы данных;
SHUTDOWN – нормальное закрытие базы данных;
SERVERERROR – возникновение ошибки;
LOGON – создание сеанса;
LOGOFF – нормальное завершение сеанса.
Ясно, что триггеры на эти события в основном используются для решения задач администрирования и обеспечения безопасности. Например, в триггерах на LOGON могут осуществляться дополнительные проверки правомерности создания сеанса (проверяться могут время создания сессии, IP-адрес клиента, название клиентского приложения), или устанавливаться переменные окружения сессии пользователя. В триггере на завершение сессии может собираться статистика о выполненных в ходе этой сессии операциях.
Триггеры на события базы данных обычно создаются самими администраторами баз данных или самыми опытными разработчиками прикладных систем.
При создании хранимых программ PL/SQL в словаре-справочнике базы данных Oracle сохраняются и байт-код программ и их исходный код, который доступен для построчного просмотра в представлениях словаря-справочника данных DBA_SOURCE, ALL_SOURCE и USER_SOURCE.
SQL> CREATE OR REPLACE PROCEDURE test AS
2 i INTEGER := 1;
3 BEGIN
4 SELECT i+1 INTO i FROM dual;
5 END;
6 /
Procedure created.
SQL> SELECT TEXT FROM USER_SOURCE
2 WHERE name='TEST' AND type='PROCEDURE'
3 ORDER BY line
4 /
TEXT
–
PROCEDURE test AS
i INTEGER := 1;
BEGIN
SELECT i+1 INTO i FROM dual;
END;
Именно из этих представлений словаря-справочника данных формируют исходный код хранимых программ GUI-клиенты (Quest SQL Navigator, TOAD, PL/SQL Developer) при открытии программ в Stored Program Editor и выполнении операций Extract DDL. Администратор базы данных в представлении DBA_SOURCE может посмотреть исходный код любой хранимой программы и фактически получается так, что все программное обеспечение, написанное на PL/SQL, является open-source software.
Разобраться в коде PL/SQL довольно легко и у кого-то может возникнуть желание внести изменения в логику чужой программы или в ее настройки. Довольно часто настройки программ PL/SQL «зашивают» в коде как локальные константы тел пакетов, и может возникнуть желание несанкционированно их поменять. Помимо этого на исходный код программ PL/SQL могут иметься права как на интеллектуальную собственность.
По этим причинам возникает необходимость защитить исходный код программ PL/SQL от чтения и изменения. Сделать так, чтобы исходный код не распространялся вместе с программами нельзя, но можно его специальным образом обработать – привести к нечитаемому виду. Мы будем использовать термин «нечитаемый код» («скрытый код»), а процесс приведения кода к нечитаемому виду называть сокрытием кода.
Для приведения кода PL/SQL к нечитаемому виду есть три средства:
утилита wrap;
встроенный пакет DBMS_DDL;
встроенный пакет DBMS_WRAP (с Oracle 10g Release 2).
Общая схема сокрытия исходного кода PL/SQL следующая:
программист разрабатывает программу PL/SQL как обычно;
выгружает исходный код программы в текстовый файл (операция Extract DDL средства разработки на PL/SQL);
обрабатывает исходный код в файле утилитой wrap;
полученный DDL-скрипт с нечитаемым исходным кодом программы PL/SQL доставляется администратору, который «прогоняет» его в базе данных.
Утилита wrap работает из командной строки операционной системы. Для Windows ее исполняемый файл wrap.exe нужно запустить из подкаталога BIN домашнего каталога инсталляции Oracle. Формат вызова утилиты:
wrap iname=исходный_файл [oname=обработанный файл]
Обработаем исходный код нашей процедуры test.
C:\Temp>wrap.exe iname=test.sql oname=test_wrapped.sql
PL/SQL Wrapper: Release 11.2.0.2.0-Production on Wed Jan 13 17:51:44 2015
Copyright (c) 1993, 2009, Oracle. All rights reserved.
Processing test.sql to test_wrapped.sql
Можно сразу посмотреть в текстовом редакторе получившийся файл test_wrapped.sql, но лучше мы сначала пересоздадим нашу процедуру, а потом посмотрим ее код в USER_SOURCES.
C:\Temp\sqlplus.exe u1/u1password @test_wrapped.sql
SQL*Plus: Release 11.2.0.2.0 Production on Wed Jan 13 17:57:02 2015
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
Procedure created.
SQL> SELECT text FROM USER_SOURCE
2 WHERE name='TEST' AND type='PROCEDURE'
3 ORDER BY line
4 /
TEXT
–
PROCEDURE test wrapped
a000000
ab
abcd
…
abcd
7
51 8d
suQy2odKI6E8Sra9zNpbNb8IqrAwg5SXf8upynREacFBBrvc2NNbRvLsynXhgKU2wLXjHtmY
DTDLTIiGQltxbGfKvlKRlWFqVHtX8kGHrS0gyD3ka0e/J74vRQynV1uZUJv7WQW2hw==
Нечитаемый исходный код еще называют «wrap’ленный исходник». Отметим его следующие свойства:
Читать дальше