Выбрать главу

данных размещает данные из 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, содержимое которой должно быть сжато. Обратите внимание