Опубликован: 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

  1. Выполните скрипт, как показано в листинге 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. Создание таблицы и наполнение данными
  2. Создайте новую форму и сохраните ее как CRYPT.
  3. Создайте блок данных на таблицу TCRYPT и две кнопки. Расположите элементы на канве, как это показано на рисунке. Подпишите элементы и установите для первой кнопки метку "Зашифровать" и для второй - "Расшифровать" (рис. 10.1).
    Форма "CRYPT"

    Рис. 10.1. Форма "CRYPT"
  4. Находясь в Навигаторе Объектов, перейдите в узел "Программы" и создайте последовательно две функции: 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
  5. Создайте триггер WHEN-BUTTON-PRESSED для кнопки "Зашифровать".
    WHEN-BUTTON-PRESSED
    BEGIN
    :val_str:=encrypt(:val_str,'KeyCrypt');
    END;
  6. Создайте триггер WHEN-BUTTON-PRESSED для кнопки "Расшифровать".
    WHEN-BUTTON-PRESSED
    BEGIN
    :val_str:=decrypt(:val_str,'KeyCrypt');
    END;
  7. Запустите форму на выполнение. Выберите данные и попробуйте их зашифровывать и расшифровывать. Вы можете шифровать данные по какому-либо условию, например, в триггерах POST-QUERY или WHEN-NEW-RECORD[ITEM]-INSTANCE. Ниже на рис. 10.2 изображен пример работы формы.
Пример работы формы

Рис. 10.2. Пример работы формы
< Лекция 9 || Лекция 10 || Лекция 11 >
Константин Лукин
Константин Лукин

ошибка: FRM47337  Tree node label can not be null

при выполнении скрипта

DECLARE
 Itree ITEM;
 top_node Ftree.Node;
 new_node Ftree.Node;
 i_value VARCHAR2(30);
BEGIN
 Itree := Find_Item('tree_block.tree_item ');
 new_node := Ftree.Add_Tree_Node(Itree, Ftree.ROOT_NODE,
   Ftree.PARENT_OFFSET, Ftree.LAST_CHILD,
   Ftree.EXPANDED_NODE, i_value, NULL, i_value);
END;

Юлия Малыгина
Юлия Малыгина
приведена функция скрытия URL отчета и ее применение, но применения так и нет
Жанбек Сарсенов
Жанбек Сарсенов
Россия, Москва, Московский Государственный Университет имени Ломоносова М.В., 2002