Oracle DB: TDE / Смена мастер-ключа и пароля на валлет

Материал из sysadm
Перейти к навигации Перейти к поиску

Начальные условия

  • В базе данных часть ТП зашифрована средствами TDE
  • Мастер-ключ размещен в хранилище ключей wallet (файл в файловой системе).
  • Резервный сервер работает в режиме Standby.
  • Требуется сменить мастер-ключ и пароль на wallet

Выполняется на PRIMARY сервере

1. Остановка базы

  • остановка всех прикладных сервисов на серверах приложений, взаимодействующих с базой
  • отключение ближайших заданий резервирования базы в ОС
  • октлючение ближайших заданий в базе
  • завершение сессий пользователей
  • выключение standby
-- выключение соответствующего направления синхронизации
sql> alter system set log_archive_dest_state_2 = defer scope=both;

-- сброс текущих редулогов в архив-лог для завершения процесса передачи архив-логов на STANDBY
sql> ALTER SYSTEM ARCHIVE LOG CURRENT;

-- выполняется на STANDBY
-- проверка что процессы передачи логов (RFS) завершились
sql> set line 300;
sql> SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
  • остановка базы
  sql> shutdown immediate;

2. Остановка листенера

lsnrctl stop [<имя_листенера>]

3. Запуск базы (без листенера)

startup;

-- проверка статуса и режима для подключений
SQL> select status,logins from v$instance;
 STATUS       LOGINS
 ------------ ----------
 OPEN         ALLOWED

-- если режим RESTRICTED, то отключаем его
SQL> alter system disable restricted session;

4. Отключение автологина (если включен)

-- проверка текущего валлета
SQL> SELECT wrl_parameter, wallet_type, status FROM V$ENCRYPTION_WALLET;
 WRL_PARAMETER                  WALLET_TYPE     STATUS
 ------------------------------ --------------- ---------------
 /path/to/wallet_dir/          AUTO_LOGIN       OPEN

-- отключение автологина и открытие паролем
cd /path/to/wallet_dir
mv cwallet.sso cwallet.sso.bak

SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE;
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "***wallet_pass***";

-- проверка валлета
SQL> SELECT wrl_parameter, wallet_type, status FROM V$ENCRYPTION_WALLET;
 WRL_PARAMETER                  WALLET_TYPE     STATUS
 ------------------------------ --------------- ---------------
 /path/to/wallet_dir/          PASSWORD        OPEN

5. Смена пароля и мастер-ключа

-- смена пароля на wallet
SQL> ADMINISTER KEY MANAGEMENT ALTER KEYSTORE PASSWORD IDENTIFIED BY "old_wallet_pass" SET "new_wallet_pass" WITH BACKUP;
-- смена мастер-ключа
SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "***wallet_pass***" WITH BACKUP;

6. Включение локального автологина (если необходимо)

SQL> ADMINISTER KEY MANAGEMENT CREATE LOCAL AUTO_LOGIN KEYSTORE FROM KEYSTORE '/path/to/wallet_dir' IDENTIFIED BY "***wallet_pass***";
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY "***wallet_pass***";

-- проверка валлета
SQL> SELECT wrl_parameter, wallet_type, status FROM V$ENCRYPTION_WALLET;
 WRL_PARAMETER                  WALLET_TYPE     STATUS
 ------------------------------ --------------- ---------------
 /path/to/wallet_dir/        LOCAL_AUTOLOGIN    OPEN

7. Проверка мастер-ключа

-- список идентификаторов мастер-ключей (mkid) в кодировке base64
-- при активации мастер-ключа в его записи обновляется время activateion_time, поэтому рабочим должен быть мастер-ключ с наибольшей датой активации
col key_id format a55;
col activation_time format a40;
SELECT key_id, activation_time, creator_dbid, activating_dbid FROM V$ENCRYPTION_KEYS;

-- список шифрованных ТП с указанием mkid мастер-ключа в шестнадцатеричной форме
SELECT b.name,a.ENCRYPTEDTS,a.ENCRYPTEDKEY,a.MASTERKEYID,a.KEY_VERSION,a.STATUS,a.CON_ID FROM v$encrypted_tablespaces a, v$tablespace b where a.ts# = b.ts#;

-- преобразование mkid из шестнадцатеричной формы в кодировку base64
select utl_raw.cast_to_varchar2( utl_encode.base64_encode('01'||substr('<mkid>',1,4))) ||
       utl_raw.cast_to_varchar2(
         utl_encode.base64_encode(substr('<mkid>',5,length('<mkid>')))
       ) masterkeyid_base64 FROM dual;
-- сравниваем результат со списком мастер-ключей, проверяем его дату активации

Выполняется на STANDBY сервере

1. Остановка стендбай

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> shutdown immediate;

2. Копирование хранилища ключей с PRIMARY на STANDBY (без файла автологина cwallet.sso)

3. Октытие валлета паролем

SQL> startup nomount;
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "***wallet_pass***";

-- проверка валлета
SQL> SELECT wrl_parameter, wallet_type, status FROM V$ENCRYPTION_WALLET;
 WRL_PARAMETER                  WALLET_TYPE     STATUS
 ------------------------------ --------------- ---------------
 /path/to/wallet_dir/            PASSWORD        OPEN

4. Включение локального автологина (если необходимо)

SQL> ADMINISTER KEY MANAGEMENT CREATE LOCAL AUTO_LOGIN KEYSTORE FROM KEYSTORE '/path/to/wallet_dir' IDENTIFIED BY "***wallet_pass***";
SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY "***wallet_pass***";

-- проверка валлета
SQL> SELECT wrl_parameter, wallet_type, status FROM V$ENCRYPTION_WALLET;
 WRL_PARAMETER                  WALLET_TYPE     STATUS
 ------------------------------ --------------- ---------------
 /path/to/wallet_dir/        LOCAL_AUTOLOGIN    OPEN

5. Запуск STANDBY

SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

Выполняется на PRIMARY сервере

1. Включение STANDBY

SQL> alter system set log_archive_dest_state_2 = enable scope=both;

2. Включите все что выключали на этапе остановки базы