Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Salustiano Muniz

Expirar senha de usuário pelo MySQL

Recommended Posts

Olá.

 

Tenho uma tabela "funcionarios" no meu banco de dados com as informações de acesso dos usuários ao sistema, mas queria que esse usuário "expirasse" depois de 60 dias. Um dos campos da tal tabela é "status", que tem 3 estados: ativo (usuário OK), inativo (usuário não pode ter acesso ao sistema) e expirado (também não entra no sistema, mas a intenção deste é de que ele mude quando o usuário renovar a senha). Resumindo, queria que o banco desse update nessa tabela 60 dias depois de cada mudança de senha (passando o usuário de ativo para expirado).

 

Agradeço as respostas que forem dadas neste tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Salustiano Muniz,

 

você pode fazer uma trigger para q isso seja feito automaticamente, só q você teria q implementar uma data na sua tabela de usuários.

 

Primeiro, vamos criar uma tabela de exemplo:

 

CREATE TABLE ex_usuarios (

Usu_Codigo int(11) NOT NULL auto_increment,

Usu_Nome varchar(20) NOT NULL,

Usu_Senha varchar(20) NOT NULL,

Usu_Status int(11) NOT NULL, # Sendo: 0 = Ativo; 1 = Inativo; 3 = Expirado

Usu_Data date NOT NULL,

PRIMARY KEY (Usu_Codigo),

UNIQUE KEY `Usu_Senha` (`Usu_Senha`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 

 

INSERT INTO ex_usuarios (Usu_Nome, Usu_Senha, Usu_Status, Usu_Data) VALUES

('Beltrano', DECODE('123456', 'chave'), 1, '2010/07/20'),

('Cicrano', DECODE('654321', 'chave'), 1, '2010/08/08'),

('Fulano', DECODE('654123', 'chave'), 1, '2010/08/10');

 

Agora crie sua procedure:

 

DELIMITER //

CREATE PROCEDURE ExpiraSenha(vlDias INT)

BEGIN

 

UPDATE ex_usuarios SET Usu_Status = 3

WHERE DATE_FORMAT(DATE_ADD(Usu_Data, INTERVAL vlDias DAY), '%d/%m/%Y') >= DATE_FORMAT(CURDATE(), '%d/%m/%Y');

 

#Aqui atualizaremos os usuários, alterando o código de status para 3 quando a data de expiração prevista for maior ou igual à data atual.

 

END;//

 

E, finalmente execute a procedure e uma select para ver o resultado:

 

CALL ExpiraSenha(15);

//Na linha acima passei um valor 15 para calcular a previsão da data para expirar a senha. Assim, se a data atual for maior ou igual à data prevista o comando será realizado.

 

SELECT * FROM ex_usuarios;

 

Espero tê-lo ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.