Посмотреть состояние и местонахождение бумажника с шифроключами можно только с версии 11 в таблице V$ENCRYPTION_WALLET.
Перечень шифруемых столбцов в таблицах БД можно получить из отдельных системных таблиц DBA/ALL/USER_ENCRYPTED_COLUMNS. В нашем случае мы получим: SQL> SELECT * FROM user_encrypted_columns;
TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SAL ------------------- ------------------- -------------------------- --- CLOSED B AES 192 bits key NO
Полное имя последнего столбца SALT. Поле ENCRYPTIONALG сообщает алгоритм шифрования. Кроме умолчательного AES192 возможны AES128, AES256 и 3DES168. Эти алгоритмы следует указывать явно: ALTER TABLE closed REKEY USING 'aes256';
Обратите внимание, что алгоритм указывается не для столбца, а для всей таблицы. Это потому, что Oracle не позволяет разным столбцам таблицы использовать разные алгоритмы шифрования: технически «шифрование выполняется на уровне блока» (цитата). Фактически последняя команда сменяет не только алгоритм, но и ключ шифрования, тоже один на всю таблицу. Этот собственный ключ шифрования таблицы (не «главный») тут же сам шифруется главным ключом из бумажника и запоминается для нее в БД, в системной таблице ENC$. Оттуда он будет браться при всякой шифровке/расшифровке значений полей строк таблицы. Так, при обращении к зашифрованному полю таблицы СУБД возьмет из ENC$ зашифрованый ключ этой таблицы, расшифрует его главным ключом из бумажника, и уже восстановленым ключом таблицы расшифрует значение поля.
Если нужно сменить хранимые шифрозначения, можно выдать просто: ALTER TABLE closed REKEY;
На «законную» возможность читать данные это никак не скажется (равно как и предыдущее действие), но хранимые значения будут подменены на вычисленные заново.
Упражнение. Проверить, изменится ли хранение в БД зашифрованных данных при смене шифроключа таблицы.
Посмотреть ключи шифрования в бумажнике можно программой mkstore, например: >mkstore -wrl C:\oracle\admin\orcl\wallet -list