Usuário com melhor resposta
Proc Alteração de senha

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
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
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?
-
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
-
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
-
-