Oracle Wallet и шифрование табличных пространств

СУБД Oracle Database с годами постепенно совершенствует свои криптографические возможности. В Oracle8i появился пакет DBMS_OBFUSCATION_TOOLKIT, а в версии Oracle 10.1 — пакет DBMS_CRYPTO, предназначенный для реализации криптографии. И набор инструментов,и пакет DBMS_CRYPTO требуют применения криптографических ключей и обращения к API-интерфейсу для выполнения необходимых операций шифрования/дешифрации.

Зачем нужны шифрованные табличные пространства

В Oracle Database было представлено новое средство прозрачного шифрования данных — Transparent Data Encryption (TDE), которое позволяет легко шифровать данные столбцов в таблице. Шифрование называется прозрачным, потому что база данных Oracle заботится обо всех деталях шифровки и дешифровки, не требуя ручного управления таблицами и триггерами для расшифровки данных. Теперь в Oracle Database 11g можно шифровать все табличное пространство, просто используя пару специализированных конструкций во время создания табличного пространства. Шифрование табличного пространства оберегает находящиеся в нем данные от неавторизованного доступа прямым обращением к файлам операционной системы. Шифрование позволяет безопасно пересылать носитель резервной копии во внешнее хранение или другие места.

Когда вы шифруете столбцы таблицы, появляются ограничения, накладываемые на некоторые запросы. Шифруя все табличное пространство, от некоторых из этих ограничений можно избавиться. Например, в Oracle Database 10g вы не можете шифровать столбец, если он является частью внешнего ключа или участвует в другом ограничении базы данных. Шифровка всего табличного пространства снимает это ограничение.Ниже перечислены дополнительные соображения в пользу применения шифрования на уровне табличного пространства:

  • индексы, основанные на функциях;
  • сканирование индексов по диапазону;
  • ограничения типов данных;
  • секционирование таблиц (разбиение на разделы/подразделы).

Шифрование табличного пространства зависит от средства прозрачного шифрования базы данных Oracle, которое требует создания и поддержки репозитория доверительной информации, называемого Oracle Wallet и предназначенного для хранения криптографического мастер-ключа базы данных.

Создание Oracle Wallet

Oracle Wallet — это контейнер, предназначенный для хранения доверительной информации (мандатов) аутентификации и подписей. Средство шифрования табличного пространства полагается на Oracle Wallet в хранении и защите мастер-ключа, используемого для шифрования. Существуют два вида Oracle Wallet — шифруемые и авто-открываемые.Вы должны вручную открыть шифруемый бумажник (wallet) после создания базы данных, в то время как авто-открываемый бумажник открывается автоматически при запуске базы данных. Шифруемый бумажник обычно рекомендуется для шифрования табличного пространства, если только вы не имеете дело с необслуживаемыми средами Oracle Data Guard; в этом случае автоматическое открытие бумажника очень удобно.


На заметку! Хотя вы не можете создавать шифруемое табличное пространство undo или временное табличное пространство, когда база данных пишет данные из любого шифруемого или временного табличного пространства (или же файлов журналов повторного выполнения), она автоматически шифрует эти данные. Таким образом, вам не нужно шифровать табличные пространства undo и временные табличные пространства.


Oracle Wallet, который в действительности является файлом в вашей системе каталогов, называется ewallet.p12 — как в Windows, так и в UNIX/Linux. Местоположение этого файла специфично для операционной системы. Однако можно специфицировать местоположение, отличающееся от стандартного, используя параметр ENCRYPTION_WALLET_LOCATION в файле sqlnet.ora:

ENCRYPTION_WALLET_LOCATION in the sqlnet.ora file, as shown here:
ENCRYPTION_WALLET_LOCATION =
(SOURCE=
(METHOD=file)
(METHOD_DATA=
(DIRECTORY=/apps/oracle/general/wallet) ) ) 

Для использования TDE необходимо иметь привилегию ALTER SYSTEM и пароль для доступа к Oracle Wallet. Если у вас нет Oracle Wallet, потребуется создать его и затем добавить к нему мастер-ключ. Это можно сделать несколькими способами:

  • вызвав Oracle Wallet Manager через графический интерфейс;
  • вызвав Oracle Wallet Manager командой owm в командной строке;
  • используя команду mkstore в командной строке операционной системы.

Совет. Используйте следующий синтаксис для создания Oracle Wallet из операционной системы:

mkstore -wrl $ORACLE_BASE/admin/$ORACLE_SID/wallet -create
Enter password:
Enter 

Однако простейший способ создания Oracle Wallet заключается в выдаче оператора SQL, и здесь мы используем именно этот метод. Прежде чем создать Oracle Wallet,вы должны сначала создать каталог по имени wallet внутри каталога $ORACLE_BASE/admin/$ORACLE_SID. Если вы не сделаете этого, то получите ошибку ORA-28368: “Cannot auto-create wallet” (“не удается создать бумажник”). Наиболее простой способ создания Oracle Wallet предусматривает применение следующей команды в среде SQL*Plus:

SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "пароль"
System altered.
SQL> 

Показанный здесь оператор ALTER SYSTEM и создает Oracle Wallet, если он еще не существует, и добавляет к нему мастер-ключ. Разумеется, на месте "пароль" необходимо указать ваш собственный пароль.

Оператор ALTER SYSTEM, приведенный выше, работает следующим образом:

  • если Oracle Wallet уже существует, оператор его открывает и создает (или пересоздает) мастер-ключ шифрования;
  • если у вас еще нет Oracle Wallet, он создается, открывается, после чего создается новый мастер-ключ

Успешно создав Oracle Wallet, вы готовы шифровать табличные пространства, используя новое средство шифрования табличных пространств.

Создание шифрованного табличного пространства

После создания Oracle Wallet очень просто создать шифрованное табличное пространство. Оператор создания шифрованного табличного пространства имеет следующий синтаксис:

SQL> CREATE TABLESPACE <имя_табличного_пространства>
ENCRYPTION
DEFAULT STORAGE(encrypt) 

Конструкция ENCRYPTION во второй строке в действительности не шифрует табличное пространство. Вы просто задаете свойства шифрования, устанавливая значения для ключевого слова ENCRYPTION. С помощью конструкции USING можно указать имя применяемого алгоритма шифрования, такого как 3DES168, AES128, AES192 и AES256,если вы не хотите использовать алгоритм AES128, принятый по умолчанию. В этом случае можно вообще опустить конструкцию USING.

Ключевое слово ENCRYPT, переданное конструкции STORAGE в третьей строке, выполняет собственно шифрование табличного пространства. Далее мы посмотрим, как зашифровать табличное пространство.

Ниже приведен пример, демонстрирующий создание простого шифрованного табличного пространства, которое по умолчанию использует шифрование DES128. Поскольку специфицировать уровень шифрования по умолчанию не нужно, конструкция USING в строке 3 не указывается.

SQL> CREATE TABLESPACE encrypt1
2 DATAFILE 'c:\orcl11\app\oracle\oradata\eleven\encrypt_01.dbf'
3 SIZE 100m
4 ENCRYPTION
5* DEFAULT STORAGE (encrypt);
Tablespace created.
SQL> 

Новый столбец encrypted в таблице DBA_TABLESPACES позволяет увидеть статус шифрования табличного пространства:

SQL> SELECT tablespace_name,encrypted
FROM dba_tablespaces;
TABLESPACE_NAME ENC
--------------- ------
SYSTEM          NO
SYSAUX          NO
UNDOTBS1        NO
TEMP            NO
USERS           NO
ENCRYPT1        YES
6 rows selected.
SQL> 

Отсюда видно, что табличное пространство encrypt1 зашифровано.

Если запросить представление V$ENCRYPTED_TABLESPACES, можно увидеть имя и алгоритм шифрования всех шифрованных табличных пространств в базе данных:

SQL> SELECT t.name, e.encryptionalg_algorithm
FROM v$tablespace t, v$encrypted_tablespace e
WHERE t.ts# = e.ts#; 

 

Вас заинтересует / Intresting for you:

Как удалить табличное простран...
Как удалить табличное простран... 4231 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:46
Как увеличить табличное простр...
Как увеличить табличное простр... 8329 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:46
Временные табличные пространст...
Временные табличные пространст... 7865 просмотров Ольга Потемкина Tue, 21 Nov 2017, 13:18:46
Табличное пространство Oracle ...
Табличное пространство Oracle ... 5279 просмотров Antoniy Tue, 21 Nov 2017, 13:18:46
Войдите чтобы комментировать

Fasenger аватар
Fasenger ответил в теме #8492 16 мая 2017 12:41
Спасибо, автору статьи. Все очень доступно объяснил и продемонстрировал на примере. Потребовалось зашифровать табличное пространство в базе данных Oacle 12c, а тут все на пальцах разъяснили!