RSS Feed
Apr 28

Como hago para que el password de un Usuario en Oracle nunca expire

Posted on Tuesday, April 28, 2009 in Bases De Datos, Oracle

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

create

profile

password

Enlaces

Apr 6

Permisos para recrear indices y generar Estadisticas en Oracle

Posted on Monday, April 6, 2009 in Bases De Datos

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;