Como hago para que el password de un Usuario en Oracle nunca expire
En Dias anteriores mi amigo Alejandro Jimenez, me hizo la consulta acerca de como evitar que la contraseña de un usuario en la base de Datos Oracle expire. Le ayude con el requerimiento y a continuación describo la solución.
Primero que todo hay que aclarar, que no hay algúna opción que permita indicarle a Oracle cuando el password debe vencer mediante el usuario de Base de datos directamente, este tipo de parametros viene asociado es al PERFIL que si esta relacionado con el usuario.
Entonces lo primero que se debe hacer es crear un perfil en la base de datos que tenga estipulado que el password de los usuarios a los que se le establezca el perfil nunca expira.
Para crear este perfil se debe ejecutar la siguiente sentencia (OJO el usuario debe tener los permisos necesarios para crear el perfil ya sea CREATE PERFIL O DBA)
CREATE PROFILE perfil_nunca_expire_password LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LIFE_TIME UNLIMITED PASSWORD_REUSE_MAX 10 /
Explico un poco la sentencia.
CREATE PROFILE perfil_nunca_expire_password --> Es la sentencia que crea un perfil en base de datos, en esta caso con el nombre perfil_nunca_expire_password. Esta sentencia tiene asociado muchos parametros que determinan para los usuarios valores para uso de la CPU, tiempo maximo de inactividad, número de sessiones simultaneas, valor del SGA, complejidad de la contraseña, historial de contarseñas entre otros, para nuestro caso usamos
FAILED LOGIN ATTEMPTS num > Indica el num de veces que el usuario puede errar la contraseña, antes de que esta se bloquee.
PASSWORD_LIFE_TIME num > Indica el tiempo de vida en Dias del password, aca esta la clave, si se desea que nunca expire se coloca UNLIMITED
PASSWORD_REUSE_MAX num > Indica el num de veces que se debe haber cambiado el password antes de poder reutilizarlo.
Ahora lo que sigue es asignar el perfil al usuario que deseamos su clave nunca le expire
ALTER USER NOM_USUARIO PROFILE perfil_nunca_expire_password;
Con esto el usuario no deberá nunca más cambiar el password, por que Oracle se lo solicite.
La sentecnai de create PROFILE tiene además de esos 3 paramtros otro más, que pueden resultar muy utiles para la administración no solo de contraseñas, sino de uso de CPU tambien.
La sintaxis completa de la sentencia CREATE PROFILE es



Enlaces
Permisos para recrear indices y generar Estadisticas en Oracle
Estaba creando un procedimiento almacenado en Oracle (10g), que reconstruye los índices y genera las estadísticas de algunas tablas, dicho procedimiento lo debía ejecutar un usuario diferente al propietario del objeto, al tratar de ejecutarlo me generaba el siguiente error.
ALTER INDEX USU_PROPIETARIO.INDICE_A_RECREAR REBUILD ERROR at line 1: ORA-01031: insufficient privileges
Buscando en la internet encontré que el problema se solucionaba asignado al usuario que recreaba el índice el permiso
GRANT ALTER ANY INDEX TO USU_EJECUTOR;
Al volver a lanzar la sentencia se generaba otro error esta vez
ALTER INDEX USU_PROPIETARIO.INDICE_A_RECREAR REBUILD ONLINE; ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-01031: insufficient privileges
Recurrí entonces a mi compañero Leonardo Aranzazu y se encontró que durante la recreación de los índices, Oracle crea una tabla temporal para almacenar datos del proceso que esta realizando, por lo que el usuario deberá tener el permiso de CREATE ANY TABLE, cosa un poco digámoslo así insegura, pues ni siquiera el permiso CREATE TABLE resuelve el problema.
Para asignar este permiso (debe ser el usuario SYS o un DBA) se debe lanzar la siguiente sentencia
GRANT CREATE ANY TABLE TO USU_EJECUTOR;