Buen dia a Todos:

Tengo una solucion implementada de la siguiente forma:

Tengo una tabla de usuarios con los siguientes campos:

CREATE TABLE usuario."USU_USUARIO"
(
  "Usuario" character varying(20) NOT NULL,
  "NombreUsuario" character varying(30) NOT NULL,
  "ApellidoUsuario" character varying(20) NOT NULL,
  "Activo" boolean NOT NULL DEFAULT true,
  "DocumentoIdentidad" integer NOT NULL,
  "Observacion" character varying,
  "ProxFechaCambioContrasenna" date NOT NULL, (Fecha de control de cambio de 
contaseña)
  "PeriodoCambioContrasenna" smallint, (Cada cuantos dias tiene que cambiar la 
contraseña)
  "UltimoAcceso" timestamp without time zone,
  "FechaHoraCreacion" timestamp(0 without time zone DEFAULT now(),
  "Conectado" boolean,
  "ForzarCambioContrasenna" boolean DEFAULT false, (En caso que el usaurio 
solicite un cambio de contraseña por diversos motivos)
  "UsuarioCreacion" character varying(20) DEFAULT getpgusername(),
  "UltUsuarioMod" character varying(20),
  "UltFechaHoraMod" timestamp without time zone,
  "UsuarioAnt" character varying(20),
  "CodCentro" smallint,
  CONSTRAINT "USUARIO_pkey" PRIMARY KEY ("Usuario"),
  CONSTRAINT "USU_USUARIO_fk" FOREIGN KEY ("CodCentro")
      REFERENCES general."CENTRO" ("CodCentro") MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
) 

Cuando la fecha del sistema es mayor a la fecha de vencimiento o se pide forzar 
contraseña, ejecuto la siguiente funcion:

CREATE OR REPLACE FUNCTION usuario.pa_actualizar_usu_contrasenna(_usuario 
character varying, _contrasenna character varying, _proxfechacambiocontrasenna 
timestamp without time zone, _programa character varying, _modulo character 
varying, _operacion smallint)
  RETURNS void AS
$BODY$
DECLARE
varactividad varchar;
BEGIN
    execute 'alter role ' || quote_ident(_usuario) || ' password ' || 
quote_literal(_contrasenna); (Actualizo la contraseña con lo que ingreso el 
usuario)
    UPDATE usuario."USU_USUARIO" 
        SET "ProxFechaCambioContrasenna" = _proxfechacambiocontrasenna   
(Actualizo la proxima fecha de cambio de contraseña)
            , "ForzarCambioContrasenna" = false (En caso que pidio forzar 
contraseña, inicializo a falso)
    WHERE "Usuario" = _usuario;
    varactividad = 'Cambio de Contrasenna del Usuario ='|| _usuario;
     execute usuario.pa_registrar_auditoria (getpgusername(), _programa, 
_modulo, varactividad, _operacion);
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

Si el administrador del sistema marcó forzar contraseña a pedido del usuario, 
se ejecuta el siguiente script:

         if _forzarcambiocontrasenna = true then
            execute 'alter user ' || quote_ident(_usuario) || ' WITH PASSWORD 
(Contraseña por Defecto)';
        end if; 


> Date: Fri, 29 Jun 2012 09:10:39 -0300
> From: [email protected]
> To: [email protected]
> Subject: [pgsql-es-ayuda] Forzar contraseñas
> 
> Vuelvo sobre el tema
> El valid until funciona, pasada esa fecha el usuario no se puede 
> conectar, por lo cual no puede cambiar la contraseña, no es lo que busco.
> Mi idea es algo como lo que tiene oracle, tiene fecha de vencimiento, 
> periodo de gracia y bloqueo automático (valid until).
> El funcionamiento requerido es que mande algun tipo de sqlwarning en la 
> conexion avisando que llego el tiempo de vencimiento, para que las 
> aplicaciones puedan pedir el cambio durante el periodo de gracia, luego 
> de ese tiempo, la contraseña se bloquea.
> Podria complicarse mas poniendo tiempo de vigencia en los roles, etc, 
> pero el sqlwarning, ayudaria en un primer momento.
> 
> Saludos Fernando rodriguez
> 
> -
> Enviado a la lista de correo pgsql-es-ayuda ([email protected])
> Para cambiar tu suscripción:
> http://www.postgresql.org/mailpref/pgsql-es-ayuda
                                          

Responder a