¿Te acabas de encontrar con el ORA-28001? No te preocupes pues es un error muy sencillo y fácil de solucionar.
Este error es muy parecido al ORA-28000 aunque en este caso nos alerta de que la contraseña del usuario al que nos intentamos conectar ha vencido, o lo que es lo mismo, ha expirado. Para continuar tendremos que entender por qué las contraseñas pueden expirar y qué son los perfiles que Oracle proporciona a los usuarios.
[/toc]
¿Qué son los perfiles de Oracle Database?
Los perfiles son un conjunto de recursos y variables que se utilizan para limitar los recursos del sistema que un usuario puede usar. Este sistema nos permite regular la cantidad de recursos que utiliza cada usuario de base de datos mediante la creación y asignación de perfiles.
Siempre que creamos una base de datos, se crea de forma predeterminada el perfil por defecto, denominado DEFAULT.
¿Por qué obtenemos el ORA-28001?
Uno de los valores de los perfiles es el PASSWORD_LIFE_TIME, este valor indica el número de días tras el cual la contraseña dejará de ser válida, es decir expirará. En versión de Oracle Database 19 o inferiores su valor por defecto es 180. Esto quiere decir que tras 180 días la contraseña expirará y, una vez expirada obtendremos el ORA-28001.
Solucionar el ORA-28001
Aunque ya sabemos qué usuario tiene la contraseña expirada, yo siempre recomiendo echar un vistazo para confirmar. En este caso podemos listar todos los usuarios con contraseña expirada de la siguiente forma:
select * from dba_users where account_status='EXPIRED' order by 1;
Esto nos devolverá los usuarios con contraseña expirada. Todos ellos nos devolverán el ORA-28001 al intentar conectarnos.
Solventar este error es tan fácil como cambiar la contraseña del usuario en cuestión por una nueva (o por la misma que teníamos) de la siguiente forma:
alter user <NOMBRE_USUARIO> identified by <CONTRASEÑA> account unlock;
De esta forma resetearemos el contador de la contraseña, en caso de que el valor PASSWORD_LIFE_TIME de nuestro perfil a 180 días, la contraseña será válida durante ese margen de tiempo, después volverá a expirar y nos encontraremos con el mismo problema.
Prevenir el ORA-28001
Una de las opciones que tenemos para no volver a obtener el ORA-28001 es editar el perfil de nuestros usuarios y hacer que la contraseña nunca expire. Esto se podría considerar una brecha de seguridad, ya que se recomienda cambiar la contraseña con cierta frecuencia, pero todos sabemos que no siempre nos interesa hacer eso.
Podemos cambiar el valor PASSWORD_LIFE_TIME de nuestro perfil a UNLIMITED, lo que quiere decir que la contraseña nunca expirará:
ALTER PROFILE <NOMBRE_PERFIL> LIMIT PASSWORD_LIFE_TIME UNLIMITED;