none
Proc Alteração de senha RRS feed

  • Pergunta

  • Boa Tarde pessoal,

    Estou desenvolvendo uma proc para alteração de senha de um usuário, ela deve fazer as seguintes verificações antes de efetuar o update:

    -Os campos senha atual, nova senha e repetição da nova senha estão preenchidos
    -Senha atual é igual a senha do usuário logado
    -Nova senha e repetição são iguais

    O problema é que ela não está parando no IF, quando deixo campos sem preencher por exemplo, ele deveria parar no primeiro if e retornar 0, mas ele passa e retorna sempre 1. Segue abaixo a proc.

    [dbo].[ALTERA_PWD_USUARIO]
        (@P_SEQ_USUARIO INT = NULL,
        @P_DES_PASSWORD VARCHAR(64) = NULL,
        @P_STATUS_ALTERACAO INT OUTPUT,
        @P_NEWPWD VARCHAR(64) = NULL,
        @P_NEWPWD_1 VARCHAR(64) = NULL)
    AS

    IF ((@P_DES_PASSWORD = NULL) OR (@P_NEWPWD = NULL) OR (@P_NEWPWD_1 = NULL))
        BEGIN
            SET @P_STATUS_ALTERACAO = 0
        END
    ELSE
        BEGIN
            IF NOT EXISTS (SELECT * FROM GRP_USUARIOS WHERE
                (SEQ_USUARIO = @P_SEQ_USUARIO) AND (DES_PASSWORD = @P_DES_PASSWORD))
                BEGIN
                    SET @P_STATUS_ALTERACAO = 1
                END
            ELSE
                BEGIN
                    IF (@P_NEWPWD != @P_NEWPWD_1)
                        BEGIN
                            SET @P_STATUS_ALTERACAO = 2
                        END
                    ELSE
                        BEGIN
                            UPDATE GRP_USUARIOS
                            SET     DES_PASSWORD = @P_NEWPWD
                            WHERE SEQ_USUARIO = @P_SEQ_USUARIO
                            SET @P_STATUS_ALTERACAO = 3
                        END
                END
        END
    RETURN @P_STATUS_ALTERACAO
    segunda-feira, 6 de outubro de 2008 16:43

Respostas

  • Junior,


    Está OR porque os 3 campos deverão ser preenchidos, basta que um esteja nulo para que dê "erro". Já descobri o erro, neste primeiro IF as condições estavam com "= NULL" ao invés de IS NULL.

    Brigadão pela atenção !!!

    Abraço!
    • Marcado como Resposta AndréSchmidt quinta-feira, 9 de dezembro de 2010 11:37
    segunda-feira, 6 de outubro de 2008 17:01

Todas as Respostas

  • André,

     

    Você esta utilizando o operador OR no primeiro IF, este operador será executado sempre que uma das condições impostas no If for verdadeira.

     

    Você já pensou em utilizar o And ao invês do OR?

     

     

    O que é necessário para que este IF seja executado?

     

    Quantas condições devem ser impostas no IF para obrigar sua execução?

    segunda-feira, 6 de outubro de 2008 16:53
  • Junior,


    Está OR porque os 3 campos deverão ser preenchidos, basta que um esteja nulo para que dê "erro". Já descobri o erro, neste primeiro IF as condições estavam com "= NULL" ao invés de IS NULL.

    Brigadão pela atenção !!!

    Abraço!
    • Marcado como Resposta AndréSchmidt quinta-feira, 9 de dezembro de 2010 11:37
    segunda-feira, 6 de outubro de 2008 17:01
  • Boa Tarde,

     

    Ainda que funcione, não acho que essa seja uma implementação segura.

    Observe que armazenar senhas como um campo VARCHAR é muito perigoso. Primeiro porque um SELECT no banco, e alguém poderá obter as senhas dos demais usuários. Segundo porque normalmente campos VARCHAR não são sensitivos por padrão e estaremos admitindo que a senha PASSWORD é igual a senha password.

     

    Recomendo rever esse tipo de implementação. Procure outro tipo de dados e (ou) utilize os recursos de criptografia para essa coluna

     

    [ ]s,

     

    Gustavo

    segunda-feira, 6 de outubro de 2008 18:30
  • André,

     

    Ok!!!

     

    Sobre a sugestão do Gustavo, gostaria de alertar para utilização de campos binários, para aumentar o nível de segurança das suas senhas, permitindo utilizar criptografia.

    segunda-feira, 6 de outubro de 2008 18:38
  • Gustavo e Junior,

    Muito obrigado pelas dicas, a senha já estava sendo encriptada!!! Os paramêtros recebem a senha encriptada...

    Valeu!!!!
    quinta-feira, 30 de outubro de 2008 17:01