ошибка: FRM47337 Tree node label can not be null при выполнении скрипта DECLARE |
Опубликован: 25.09.2009 | Уровень: специалист | Доступ: платный
Лекция 10:
Шифрование данных в Oracle Forms
< Лекция 9 || Лекция 10 || Лекция 11 >
Аннотация: В этой лекции слушатель ознакомится с возможностями шифрования данных в Oracle, а именно с пакетом dbms_obfuscation_toolkit, для шифрования данных в своем приложении.
Потребность в шифровании данных существует всегда, так как информация, особенно в наши дни, - это довольно большая ценность. В современных промышленных и корпоративных системах уделяют большое внимание безопасности и конфиденциальности данных. Пакет DBMS_OBFUSCATION_TOOLKIT - это мощный и в то же время простой инструмент для шифрования данных. Этот пакет поддерживается в Oracle начиная с версии 8.1.6. Он состоит из двух основных процедур:
- DESENCRYPT - эта процедура предназначена для шифрования данных ;
- DESDECRYPT - эта процедура предназначена для расшифровки данных.
Использование пакета dbms_obfuscation_toolkit
- Выполните скрипт, как показано в листинге 10.1.
SQL> CREATE TABLE TCRYPT 2 (val_num number, 3 val_str varchar2(100)) 4 / Таблица создана. SQL> INSERT INTO TCRYPT VALUES (1, 'Oracle Forms') 2 / 1 строка создана. SQL> INSERT INTO TCRYPT VALUES (2, 'Oracle Reports') 2 / 1 строка создана. SQL> INSERT INTO TCRYPT VALUES (3, 'Oracle Graphics') 2 / 1 строка создана. SQL> INSERT INTO TCRYPT VALUES (4, 'Oracle Portal') 2 / 1 строка создана. SQL> INSERT INTO TCRYPT VALUES (5, 'JDeveloper') 2 / 1 строка создана
Листинг 10.1. Создание таблицы и наполнение данными - Создайте новую форму и сохраните ее как CRYPT.
- Создайте блок данных на таблицу TCRYPT и две кнопки. Расположите элементы на канве, как это показано на рисунке. Подпишите элементы и установите для первой кнопки метку "Зашифровать" и для второй - "Расшифровать" (рис. 10.1).
- Находясь в Навигаторе Объектов, перейдите в узел "Программы" и создайте последовательно две функции: ENCRYPT (листинг 10.2) и DECRYPT (листинг 10.3). ENCRYPT - это функция, которая зашифровывает переданную в нее строку, а DECRYPT - это функция, которая расшифровывает указанную строку. Для шифровки и расшифровки данных необходимо знать и использовать ключ.
FUNCTION encrypt (p_text varchar2,p_key varchar2 ) RETURN varchar2 IS v_text varchar2(2000); v_enc varchar2(2000); BEGIN IF p_text IS NULL THEN RETURN NULL; END IF; if p_key IS NULL THEN RETURN p_text; END IF; v_text:=rpad(p_text,(trunc(length(p_text)/8)+1)*8,chr(0)); sys.dbms_obfuscation_toolkit.desencrypt( input_string=>v_text, key_string=>rpad(p_key,8,p_key), encrypted_string=>v_enc); return v_enc; END ENCRYPT;
Листинг 10.2. Функция ENCRYPTФункция ENCRYPT принимает два параметра, первый из которых - имя шифруемой строки, а второй - это ключ шифрования.
FUNCTION decrypt (p_text varchar2,p_key varchar2 ) RETURN varchar2 IS v_text varchar2(2000); BEGIN IF p_text IS NULL THEN RETURN NULL; END IF; IF p_key IS NULL THEN RETURN p_text; END IF; sys.dbms_obfuscation_toolkit.desdecrypt( input_string=>p_text, key_string=>rpad(p_key,8,p_key), decrypted_string=>v_text); RETURN rtrim(v_text,chr(0)); END DECRYPT;
Листинг 10.3. Функция DECRYPT - Создайте триггер WHEN-BUTTON-PRESSED для кнопки "Зашифровать".
WHEN-BUTTON-PRESSED BEGIN :val_str:=encrypt(:val_str,'KeyCrypt'); END;
- Создайте триггер WHEN-BUTTON-PRESSED для кнопки "Расшифровать".
WHEN-BUTTON-PRESSED BEGIN :val_str:=decrypt(:val_str,'KeyCrypt'); END;
- Запустите форму на выполнение. Выберите данные и попробуйте их зашифровывать и расшифровывать. Вы можете шифровать данные по какому-либо условию, например, в триггерах POST-QUERY или WHEN-NEW-RECORD[ITEM]-INSTANCE. Ниже на рис. 10.2 изображен пример работы формы.
< Лекция 9 || Лекция 10 || Лекция 11 >