Um simples processo de troca de senha no banco de dados pode gerar uma grande dor de cabeça em ambientes com várias aplicações, integrações, database links, jobs, etc. Uma vez que essas aplicações vão apresentar falha de conexão até que tenham suas credenciais atualizadas e isso nem sempre é um processo muito rápido.
A partir do Oracle 19.12 foi disponibilizado o gradual database rollover time, uma feature que possibilita uma troca de senha com um menor impacto, permitindo que a senha anterior e a nova senha coexistam por um período controlado. Assim as aplicações pode ter suas credenciais ajustadas de forma gradativa sem impacto.
Em uma troca tradicional de senha, o DBA altera a senha no banco de dados com o comando:
ALTER USER usuario IDENTIFIED BY nova_senha;
A partir do momento que o comando é executado, novas conexões que tentam utilizar a senha anterior passarão a apresentar falha através do erro ORA-01017: invalid username/password.
Com o gradual database password rollover, a troca da senha ocorre em "etapas".
- Senha antiga válida
- Alteração da senha
- Senha antiga + senha nova válidas
- Durante esse período os clients devem ter suas credenciais ajustada
- Somente a nova senha é válida
O parâmetro PASSWORD_ROLLOVER_TIME no profile deve ser informado em dias, podem receber o valor mínimo de uma hora 1/24 e máximo de 60 dias.
Nesta simulação, estarei criando um profile dedicado chamado app_rollover_profile e definindo o PASSWORD_ROLLOVER_TIME para 1 hora. Na sequencia será criado o usuário app_rollover setando este profile criado.
SQL> show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 LAMIMPDB READ WRITE NO SQL> alter session set container=LAMIMPDB; Session altered. SQL> CREATE PROFILE app_rollover_profile LIMIT PASSWORD_ROLLOVER_TIME 1/24; 2 3 Profile created. SQL> SQL> SET LINESIZE 160 SQL> COLUMN profile FORMAT A30 SQL> COLUMN resource_name FORMAT A35 SQL> COLUMN limit FORMAT A20 SQL> SELECT profile, resource_name, resource_type, limit FROM dba_profiles WHERE profile = 'APP_ROLLOVER_PROFILE' AND resource_name IN ( 'PASSWORD_ROLLOVER_TIME', 'PASSWORD_LIFE_TIME', 'PASSWORD_GRACE_TIME', 'FAILED_LOGIN_ATTEMPTS', 'PASSWORD_LOCK_TIME', 'PASSWORD_VERIFY_FUNCTION' ) ORDER BY resource_name; PROFILE RESOURCE_NAME RESOURCE LIMIT ------------------------------ ----------------------------------- -------- -------------------- APP_ROLLOVER_PROFILE FAILED_LOGIN_ATTEMPTS PASSWORD DEFAULT APP_ROLLOVER_PROFILE PASSWORD_GRACE_TIME PASSWORD DEFAULT APP_ROLLOVER_PROFILE PASSWORD_LIFE_TIME PASSWORD DEFAULT APP_ROLLOVER_PROFILE PASSWORD_LOCK_TIME PASSWORD DEFAULT APP_ROLLOVER_PROFILE PASSWORD_ROLLOVER_TIME PASSWORD 3600 APP_ROLLOVER_PROFILE PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT 6 rows selected. SQL> CREATE USER app_rollover IDENTIFIED BY "Lab#Old_19c!" PROFILE app_rollover_profile; User created. SQL> GRANT CREATE SESSION TO app_rollover; Grant succeeded.
Agora irei validar a conexão do usuário criado e na sequencia trocaremos a senha do mesmo para que seja iniciado o processo de rollover.
[oracle@db19c ~]$ sqlplus app_rollover/"Lab#Old_19c!"@LAMIMPDB SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jul 21 23:24:47 2026 Version 19.31.0.0.0 Copyright (c) 1982, 2026, Oracle. All rights reserved. Connected to: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production Version 19.31.0.0.0 SQL> show user; USER is "APP_ROLLOVER" SQL>
Troca da senha. O rollover começa a contar no momento desta alteração.
SQL> alter session set container=LAMIMPDB; Session altered. SQL> ALTER USER app_rollover IDENTIFIED BY "Lab#New_19c!"; User altered. SQL>
É possível validar o estado do rollover consultando o account_status da dba_users;
SQL> set lines 210 SQL> col username for a45 SQL> col profile for a60 SQL> SELECT username, account_status, profile FROM dba_users WHERE username = 'APP_ROLLOVER'; USERNAME ACCOUNT_STATUS PROFILE --------------------------------------------- -------------------------------- ------------------------------------------------------------ APP_ROLLOVER OPEN & IN ROLLOVER APP_ROLLOVER_PROFILE SQL>
Agora vamos testar uma conexão com a senha antiga e com a nova senha para comprovar que as duas estarão válidas durante o período do rollover.
SQL> conn app_rollover/"Lab#Old_19c!"@LAMIMPDB Connected. SQL> show user; USER is "APP_ROLLOVER" SQL> conn app_rollover/"Lab#New_19c!"@LAMIMPDB Connected. SQL> show user; USER is "APP_ROLLOVER" SQL>
Para finalizar antecipadamente o processo de rollover basta executar uma alteração do profile para EXPIRE PASSWORD ROLLOVER PERIOD, conforme exemplo abaixo.
SQL> alter session set container=LAMIMPDB; Session altered. SQL> set lines 210 SQL> col username for a45 SQL> col profile for a60 SQL> SELECT username, account_status, profile FROM dba_users WHERE username = 'APP_ROLLOVER'; USERNAME ACCOUNT_STATUS PROFILE --------------------------------------------- -------------------------------- ------------------------------------------------------------ APP_ROLLOVER OPEN & IN ROLLOVER APP_ROLLOVER_PROFILE SQL> ALTER USER app_rollover EXPIRE PASSWORD ROLLOVER PERIOD; User altered. SQL> SELECT username, account_status, profile FROM dba_users WHERE username = 'APP_ROLLOVER'; USERNAME ACCOUNT_STATUS PROFILE --------------------------------------------- -------------------------------- ------------------------------------------------------------ APP_ROLLOVER OPEN APP_ROLLOVER_PROFILE SQL> SQL> conn app_rollover/"Lab#New_19c!"@LAMIMPDB Connected. SQL> show user; USER is "APP_ROLLOVER" SQL> conn app_rollover/"Lab#Old_19c!"@LAMIMPDB ERROR: ORA-01017: invalid username/password; logon denied Warning: You are no longer connected to ORACLE. SQL>
O Gradual Database Password Rollover resolve um problema operacional comum: coordenar a troca de uma senha compartilhada por várias instâncias de aplicação sem interromper imediatamente as conexões que ainda utilizam a credencial anterior.
A simplicidade dos comandos não elimina a necessidade de planejamento. Quando empregado com uma janela curta, monitoração adequada e um procedimento de contingência, o recurso permite realizar rotações de credenciais com menor risco de indisponibilidade e maior controle operacional.
Managing Gradual Database Password Rollover for Applications
Comentários
Postar um comentário