none
password con limite de tiempo RRS feed

  • Pregunta

  • Hola gente, espero me puedan ayudar,  tengo una tabla usuario con un campo date <FECHA_CAMBIO_CLAVE> este campo guarda la fecha cuando el usuario cambio su contraseña de acceso al sistema, lo que necesito hacer ahora es que el usuario tenga esa contraseña por un limite de tiempo, 60 dias por ej y que 5 días antes  que se cumplan los 60 días comienze a mandar  mensajes de alerta para que el usuario cambie su contraseña, sino al cumplir los 60 dias no podra iniciar sesion y tendra que cambiar la contraseña.

    se que puedo ocupar el AddDays(60); pero hasta ahi llego.... si alguien me puede ayudar por favor

    gracias.

    martes, 16 de diciembre de 2014 13:14

Todas las respuestas

  •      Que tal amigo lo que tienes que hacer es comparar tu fecha desde la base de datos al momento de hacer el logeo del usuario.

    Ejemplo:

            if convert(varchar(10), @Fecha_cambio_clave, 103) between convert(varchar(10), getdate(), 103)
                                                            and   getdate() + 60 
                begin
                    set @Mensaje = 'Favor cambie su contraseña. Expirara en fecha '
                        + convert(varchar(10), @Fecha_cambio_clave, 103)
                    select  @Mensaje
                    return
                end   

    OBS: Favor vota si te es útil la información.
    Saludos 
    BEMO- Paraguay 
    https://tcsystems.wordpress.com/

    martes, 16 de diciembre de 2014 13:39
  • ¡Hola mcmaxi!

    Identificando los puntos necesarios veo estos:

    1. Almacenar la fecha de Cambio de Clave y validar la validez de la contraseña
    2. Envío de mensajes de alertas

    Recomendaciones

    1. Me parece que lo mejor sería registrar la fecha en la que se cambió la contraseña por última vez y al validar hacer el aumento de días para validar, en lugar de almacenar la fecha en que se debe cambiar.

    Que el servicio calendarizado esté actualizando una bandera (un campo de base de datos que indique validez de la contraseña)

    Cuando autenticas al usuario solamente primero verifica la bandera en lugar de estar comparando fechas nuevamente, si la bandera está en false solicita cambio de contraseña, si está true permite autenticar, el valor de esta bandera lo pondría el servicio calendarizado.

    2. ¿Planeas que este manejo de mensajería se realice desde una aplicación o desde la base de datos?

    • Puedes realizar una aplicación de windows calendarizada en el servidor.
    • Un servicio de Windows con fecha de arranque.
    • Un Job de base de datos (en caso de ser SQL Server) que corra un procedimiento almacenado de verificación de fecha.

    Dependiendo de la forma en que vayas a validar esto debes usar funcionalidades diferentes por ejemplo en una aplicación Windows, debes usar AddDays:

    // Extraer la fecha de la base de datos
    
    DateTime fechaAValidar = ultimoCambio.AddDays(60);

    Si lo haces en base de datos deberías usar la función DATEADD

    Saludos y espero te sirva.

    __________________________________________________________________________________________________
    Espero haberte ayudado con mi sugerencia, si resolvió tu problema no olvides marcarla como respuesta.

    martes, 16 de diciembre de 2014 13:54
  • hola

    pero que proceso realizara la operacion de alerta? tienes algun JOB o Scheduler que barre los usuario y valida esta regla para mandar notificaciones?

    porque podrias realizar una query que recupere los usuario que debes notificar usando, o lo haces desde codigo .net con linq

    si usas linq podrias usar las SqlFunctions

    para poder agtregar dias a una fecha y poder compararlas

    pero deberias comentar con mas detalla como ese ese proceso de notificacion

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 16 de diciembre de 2014 15:14
  • hola leandro gracias por responder, mira la base de datos esta en firebird, básicamente  tengo que validar que la contraseña expire al cabo de 60 días( me refiero a que el usuario deba cambiar si o si su contraseña para poder acceder al sistema, al momento de cambiar la contraseña el campo fecha_cambio_contraseña se actualizara al día que se actualizo la contraseña, y de ahí 60 días mas para hacer el nuevo cambio.)

    también se debe alertar al usuario durante un periodo de 5 días antes de los 60 días para que cambie su pass, sino lo hace llegara el día 60 y no podrá acceder.

    esto lo estoy haciendo en asp.net c# con  motor de BD. Firebird - IDE sqlHummer

       DataSet dsFecha = usuario.getFechaCambioClave(TextBoxUsuario.Text);
                        DateTime dtFecha = Convert.ToDateTime(dsFecha);
                        DateTime fechaAlerta = dtFecha.AddDays(60);
                        if (dsFecha.Tables.Count > 0)
                        {
                            //si el campo FECHA_CAMBIO_CLAVE se encuentra vacio, significa que el usuario accede por primera vez
                            //por lo tanto debera hacer el cambio de contraseña antes de poder acceder al sistema. al cambiar su contraseña el campo 
                            //FECHA_CAMBIO_CLAVE se actualizara con la fecha que se realizo el cambio de pass. la Contraseña tendra un plazo de 60 dias de valides
                            if (dsFecha.Tables[0].Rows[0]["FECHA_CAMBIO_CLAVE"].ToString() == string.Empty) 
                            {
                                //string fecha = dsFecha.Tables[0].Rows[0]["FECHA_CAMBIO_CLAVE"].ToString();                            
                                Response.Redirect("~/WFormDlgCambioClavePrimerAcceso.aspx");
                                //cFunciones.abrirMasterDialogoModal("WFormDlgCambioClavePrimerAcceso.aspx", "ContinuarEjecucionDialogEventos", "450", "550");
                            }
                                //sino este accedera directamente al main de la aplicacion
                            else
                            {
                               //aca quiero validar cuantos dias faltan para cumplir los 60.
    
                               Response.Redirect("~/Main2.aspx");
                                
                            }
    
                        }

    martes, 16 de diciembre de 2014 15:52
  • >> el usuario deba cambiar si o si su contraseña para poder acceder al sistema, al momento de cambiar la contraseña el campo fecha_cambio_contraseña se actualizara al día que se actualizo la contraseña, y de ahí 60 días mas para hacer el nuevo cambio.)

    eso seria tan simple como realizar un UPDATE a la db indicando la nueva fecha en que se esta actualizando

    >>se debe alertar al usuario durante un periodo de 5 días antes de los 60 días para que cambie su pass, sino lo hace llegara el día 60 y no podrá acceder.

    pero ese proceso quien lo va a realizar ?

    porque alli es donde indicaba si lo harias por codigo o con una query a la db obteniendo todos los usuario que cumplen la condicion

    alli veo que defines

    DataSetdsFecha =usuario.getFechaCambioClave(TextBoxUsuario.Text);

    ese metodo valida un unico usuario, pero como obtendrias una lista de todos los usuario que deben cambiar su password para notificarlo ? es alli donde apuntaba con la query

    ----

    ademas no puedes hacer esto

    DateTimedtFecha = Convert.ToDateTime(dsFecha);

    alli devuelves un dataset, no se castea nunca a datetime, deberias recuperar un campo, como ser

    DataRow row = dtFecha.Tables[0].Rows[0];

    DateTimedtFecha = Convert.ToDateTime(row["NombreCampoFecha"]);

    como veras debes llegar hasta el campo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 16 de diciembre de 2014 16:09
  • >>se debe alertar al usuario durante un periodo de 5 días antes de los 60 días para que cambie su pass, sino lo hace llegara el día 60 y no podrá acceder.

    pero ese proceso quien lo va a realizar ?

    porque alli es donde indicaba si lo harias por codigo o con una query a la db obteniendo todos los usuario que cumplen la condicion

    alli veo que defines

    DataSetdsFecha =usuario.getFechaCambioClave(TextBoxUsuario.Text);

    ese metodo valida un unico usuario, pero como obtendrias una lista de todos los usuario que deben cambiar su password para notificarlo ? es alli donde apuntaba con la query...

    lo quiero hacer por codigo.

    y claro el dataset devuelve un unico usuario porque es ese el que se esta logeando.

     

    martes, 16 de diciembre de 2014 16:21