Oracle DB: TDE / Смена мастер-ключа и пароля на валлет
Перейти к навигации
Перейти к поиску
Начальные условия
- В базе данных часть ТП зашифрована средствами 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. Включите все что выключали на этапе остановки базы