данных размещает данные из L0B в буферном кэше для более быстрого
доступа. Параметры, которые вы можете использовать для кэширования в
буфере, следующие.
■ CACHE READS Используется в случаях, когда данные L0В будут часто
читаться, но записываться только единожды или от случая к случаю.
Большие объекты 543
■ CACHE Используется, когда данные L0B часто читаются и записываются.
■ N0CACHE Используется, когда данные L0В будут читаться только единожды
или от случая к случаю, и записываться только единожды или
от случая к случаю. Это параметр по умолчанию.
Следующее выражение INSERT добавляет две строки в таблицу clob_
content:
□ INSERT INTO clob_content (
id, clob_column
) VALUES (
1, T0_CL0B(‘ Creeps in this petty pace’ )
);
INSERT INTO clob_content (
id, clob_column
) VALUES (
2, T0_CL0B(‘ from day to day’ )
);
Данные, переданные B-clob_column в этих выражениях, автоматически
зашифровываются базой данных в фоновом режиме.
Следующий запрос извлекает строки из таблицы clob_content:
П SELECT *
FROM clob_content;
ID
CL0B_C0LUMN
1
Creeps in this petty pace
2
from day to day
При извлечении данных они автоматически расшифровываются базой
данных и затем передаются в SQITPlus.
До тех пор, пока электронный бумажник открыт, вы можете сохранять
и извлекать зашифрованные данные; если бумажник закрыт, вы не можете
этого делать. Давайте посмотрим, что происходит, если бумажник закрыт.
Следующие выражения подключаются от имени пользователя system и закрывают
бумажник:
□ CONNECT system/manager
ALTER SYSTEM SET WALLET CLOSE;
Если вы теперь попытаетесь подключиться как пользователь lob_user3
и получить clob_column из таблицы clob_content, вы увидите ошибку 0RA-
28365: wallet is not open (электронный бумажник закрыт):
□ CONNECT lob_user3/lob_password
SELECT clob_column
FROM clob_content;
ORA-28365: wallet is not open
544 Глава 14
Вы по-прежнему можете извлекать и изменять содержимое незашифрованных
столбцов. Например, следующий запрос извлекает столбец id из
таблицы clob_content:
□ SELECT id
FROM clob_content;
ID
12
Следующие выражения подключаются как пользователь system и открывают
бумажник:
□ CONNECT system/manager
ALTER SYSTEM SET WALLET OPEN IDENTIFIED BY “testpassword123";
Как только это сделано, вы можете извлекать и изменять содержимое
clob_column из таблицы clob_content.
Шифрование данных столбца
Вы также можете шифровать данные обычных столбцов. Эта возможность
появилась в базе данных Oracle 10g Release 2. Например, следующее выражение
создаёт таблицу по имени credit_cards с шифрованным столбцом по
имени card_number:
□ CREATE TABLE credit_cards (
card_number NUMBER(16, 0) ENCRYPT,
first_name VARCHAR2(10),
last_name VARCHAR2(10),
expiration DATE
);
Вы можете использовать те же самые алгоритмы для шифрования столбца,
что и для LOB: 3DES168, AES128, AES192 (по умолчанию) и AES256. Так
как автор не указал алгоритм после ключевого слова ENCRYPT для столбца
card_number, будет использован алгоритм по умолчанию - AES192.
Следующие выражения INSERT добавляют две строки в таблицу credit_
cards:
□ INSERT INTO credit_cards (
card_number, first_name, last_name, expiration
) VALUES (
1234, ‘ Jason’ , ‘ Bond’ , ‘ 03-FEB-2008’
);
INSERT INTO credit_cards (
card_number, first_name, last_name, expiration
) VALUES (
5768, ‘ Steve’ , ‘ Edwards’ , ‘ 07-MAR-2009'
);
До тех пор, пока бумажник открыт, вы можете извлекать и изменять
содержимое столбца card_number. Если бумажник закрыт, вы получите сообщение
об ошибке ORA-28365: wallet is not open. В предыдущем разделе
Большие объекты 545
вы уже видели примеры, которые иллюстрируют эту концепцию, поэтому
я не буду повторять их здесь снова.
Доступ к данным в зашифрованном столбце создаёт дополнительную
нагрузку. Для шифрования и дешифрования эта дополнительная нагрузка
оценивается Oracle примерно в 5 процентов; это означает, что SELECT или
INSERT затратит на 5 процентов больше времени при выполнении. Общая
дополнительная нагрузка зависит от числа зашифрованных столбцов и
частоты доступа к ним; поэтому следует шифровать только столбцы, содержащие
важные данные.
Примечание Если вам нужно узнать больше об электронных бумажниках и в целом о безопасности
баз данных, обратитесь к руководству Advanced Security Administrator's Guide (Расширенное
Руководство Администратора по Безопасности), публикуемому корпорацией Oracle.
Компрессия данных L0B
Вы можете сжать данные, хранящиеся в BLOB, CL0B или NCL0B, чтобы уменьшить
их объём при хранении. Например, следующее выражение создаёт
таблицу с CL0B, содержимое которой должно быть сжато. Обратите внимание