Avaliação do Usuário

Estrela ativaEstrela ativaEstrela ativaEstrela ativaEstrela ativa
 

 

ACOMPANHE A SÉRIE

Sistema de Login e Senha no Access/VBA - Parte 1/5
Sistema de Login e Senha no Access/VBA - Parte 2/5
Sistema de Login e Senha no Access/VBA - Parte 3/5
Sistema de Login e Senha no Access/VBA - Parte 4/5
Sistema de Login e Senha no Access/VBA - Parte 5/5

EXEMPLO DO ARTIGO

Faça o download do exemplo do artigo para estudo: LoginSeguro.zip
O exemplo está completo, então, não se assuste caso você encontre códigos diferentes do que está sendo ensinado nesta parte do artigo.
Para compreendê-lo completamente estude primeiro todas as 5 partes do artigo.

DICA IMPORTANTE PARA ELEVAR SEU CONHECIMENTO

Assista as vídeo-aulas do Curso de Access 2010 (OfficeGuru) e também as do Curso de Programação em Access/VBA.
Para os leigos o Curso de Programação em Access/VBA é obrigatório.


INTRODUÇÃO

Quando criamos um sistema de Login e Senha devemos oferecer ao usuário a opção de alterar sua senha a qualquer momento ou, pelo menos, a cada período permitido ou exigido, de acordo com a política adotada pela empresa à qual o sistema pertence.

Na quarta parte do artigo, veremos como montar a tela de alteração de senha, que ficará disponível para usuário modificá-la sempre que achar necessário. Por ser este um sistema simples para exemplo, não implementaremos controle de periodicidade. O único procedimento obrigatório será o de alterar a senha inicial.

INTERFACE DE ALTERAÇÃO DE SENHA

Para que o usuário possa realizar a alteração de sua senha será necessários criarmos uma tela com esta finalidade. Crie um formulário com o seguinte aspecto:

Tela de Alteração de Senha

Estes são os requisitos obrigatórios do formulário:

  • O nome do formulário será FAlterarSenha.
  • Ajuste a propriedade Popup = Sim.
  • Ajuste a propriedade Janela Restrita = Sim.
  • O nome da caixa de texto que exibirá o login será txtLogin. Ela será bloqueada e terá como fonte do controle a função getUsuarioAtual().
  • O nome da caixa de texto na qual o usuário digitará a senha atual será txtSenhaAtual.
  • O nome da caixa de texto na qual o usuário digitará a nova senha será txtNovaSenha.
  • O nome da caixa de texto na qual o usuário digitará a confirmação da nova senha será txtConfirmaSenha.
  • O nome do botão de alteração da senha padrão será btnAlterar.
  • Barras de rolagem: nenhuma.

No formulário principal inclua um botão, chamado btnAlterarSenha e posicione-o no rodapé do formulário, da seguinte forma:

Botão de Alteração de Senha

Este será o código do evento Ao Clicar do botão:

Private Sub btnAlterarSenha_Click()
  DoCmd.OpenForm "FAlterarSenha"
End Sub

ALTERAÇÃO DE SENHA INICIAL

Para obrigarmos o usuário a alterar a sua senha inicial precisaremos verificar, no momento da abertura formulário principal, se a senha do usuário ainda é a senha padrão. Em caso afirmativo, será exibida uma mensagem e o formulário de alteração de senha será aberto.

Para isto altere código do evento Ao Abrir do formulário FPrincipal, para que fique da seguinte forma:

Private Sub Form_Open(Cancel As Integer)

  DoCmd.Maximize
  
  If verificaLogin(getUsuarioAtual, getSenhaPadrao) Then
    MsgBox "Por favor, altere sua senha antes de continuar.", _
            vbInformation, "Senha Padrão"
    DoCmd.OpenForm "FAlterarSenha"
  End If
  
End Sub

Porém este procedimento não basta para que o usuário efetivamente altere sua senha. Na situação em que o sistema se encontra, basta que ele simplesmente feche o formulário de alteração de senha para continuar a utilizar o aplicativo normalmente.

Para evitar que isto aconteça vamos incluir a mesma verificação de senha padrão no evento Ao Descarregar do formulário FAlterarSenha.

Private Sub Form_Unload(Cancel As Integer)

  If verificaLogin(getUsuarioAtual, getSenhaPadrao) Then
    MsgBox "Por favor, altere sua senha antes de continuar.", _
            vbInformation, "Senha Padrão"
    Cancel = True
  End If
  
End Sub

Estas instruções verificam se a senha do usuário foi alterada. Caso a mudança não tenha sido realizada, a ação de descarga do formulário será cancelada, impedindo o seu fechamento. Em resumo, enquanto o usuário não criar sua nova senha não poderá sair desta tela.


Piscando Dica: Parâmetro Cancel: vários eventos oferecem a possibilidade de cancelar a sua efetivação, como abrir, carregar, descarregar e atualizar, entre outros. Caso seja necessário cancelar a ocorrência de um evento, basta atribuir o valor True à variável Cancel.

No exemplo do evento Ao Descarregar, caso seja atribuído o valor à variável, o descarregamento do formulário será interrompido, impedindo que ocorram os próximos eventos, inclusive o de fechamento.



ALTERANDO A SENHA

Resolvida a etapa de alteração compulsória da senha inicial, resta-nos implementar a rotina que possibilita que a mudança seja efetivada. Para isto devemos verificar a execução em algumas etapas. Vejamos quais são elas:

  • O usuário deverá informar sua senha atual, que será validada.
  • A senha atual deverá estar correta. Para isto utilizaremos novamente a função verificaLogin().
  • Deverá, também, informar sua nova senha.
  • A nova senha não poderá ser igual à senha anterior, nem igual à senha padrão.
  • A nova senha não poderá ser igual ao login do usuário.
  • A nova senha não poderá conter o caracter aspa simples. Esta é uma medida de segurança, que será vista no último artigo.
  • A nova senha não poderá conter o caracter ponto e vírgula. Esta é uma medida de segurança, que será vista no último artigo.
  • Após isso, deverá confirmar esta nova senha, a fim de verificar se foi digitada corretamente.

Caso esteja tudo correto, a alteração poderá ser gravada no banco de dados. Como já criamos anteriormente o procedimento alterarSenha(), ele será reutilizado para efetuar o procedimento.

O código para realizar esta tarefa ficará assim:

Private Sub btnAlterar_Click()

  If IsNull(txtSenhaAtual) Then
  
    MsgBox "Informe a senha atual.", vbExclamation, "Alterar Senha"
    txtSenhaAtual.SetFocus
    
  ElseIf Not verificaLogin(txtLogin, txtSenhaAtual) Then
  
    MsgBox "Senha atual incorreta. Por favor, tente novamente.", _
            vbExclamation, "Alterar Senha"
    txtSenhaAtual.SetFocus
    
  ElseIf IsNull(txtNovaSenha) Then
  
    MsgBox "Informe a nova senha.", vbExclamation, "Alterar Senha"
    txtNovaSenha.SetFocus
    
  ElseIf txtNovaSenha = txtSenhaAtual Then
  
    MsgBox "A nova senha deve ser diferente da atual.", _
            vbExclamation, "Alterar Senha"
    txtNovaSenha.SetFocus
    
  ElseIf txtNovaSenha = txtLogin Then
  
    MsgBox "A nova senha deve ser diferente do seu login.", _
            vbExclamation, "Alterar Senha"
    txtNovaSenha.SetFocus
    
  ElseIf InStr(txtNovaSenha, "'") > 0 Then
  
    MsgBox "A nova senha não pode conter aspas simples.", _
            vbExclamation, "Alterar Senha"
    txtNovaSenha.SetFocus
    
  ElseIf InStr(txtNovaSenha, ";") > 0 Then
  
    MsgBox "A nova senha não pode conter o caracter ponto e vírgula.", _
            vbExclamation, "Alterar Senha"
    txtNovaSenha.SetFocus
    
  ElseIf txtNovaSenha = getSenhaPadrao Then
  
    MsgBox "Nova senha inválida. Por favor, insira uma nova senha diferente.", _
            vbExclamation, "Alterar Senha"
    txtNovaSenha.SetFocus
    
  ElseIf IsNull(txtConfirmaSenha) Then
  
    MsgBox "Confirme a nova senha.", vbExclamation, "Alterar Senha"
    txtSenhaAtual.SetFocus
    
  ElseIf txtConfirmaSenha <> txtNovaSenha Then
  
    MsgBox "Confirmação de senha incorreta. Por favor, tente novamente.", _
            vbExclamation, "Alterar Senha"
    txtConfirmaSenha.SetFocus
    
  Else
    
    'Testando a força da senha do usuário
    'para necessidade de segurança média.
    If forcaSenha(txtNovaSenha) >= 50 Then
      alterarSenha txtLogin, txtNovaSenha
      MsgBox "Senha Alterada com sucesso.", vbInformation, "Alterar Senha"
      DoCmd.Close
    Else
      MsgBox "A senha escolhida não atende aos requisitos de segurança." & vbCrLf _
            & vbLf & _
            "Por favor, utilize letras maiúsculas e minúsculas, além" & vbCrLf & _
            "de números e símbolos para criar uma senha forte." & vbCrLf _
            & vbLf & _
            "O tamanho mínimo recomendado é de 8 caracteres." _
            , vbExclamation, "Senha Insegura"
    End If
    
  End If
  
End Sub

Com isto verificamos o correto preenchimento dos campos e a validade da senha atual do usuário, confirmando sua identidade, o que evita a troca de senha por outro usuário, caso o sistema já esteja aberto.

Após a conclusão do procedimento com sucesso podemos fechar a tela de alteração de senha e voltar ao formulário principal. Neste caso a validação de nova senha no evento Ao Descarregar ocorrerá sem problemas, permitindo o fechamento do formuláro FAlterarSenha normalmente.

Pronto. Finalizamos mais uma etapa do nosso pequeno projeto . Agora o usuário já pode, a qualquer momento, realizar a mudança de sua senha.

No próximo artigo, o quinto e último da série, veremos como implementar alguns procedimentos e utilizar ferramentas que proporcionem maior segurança ao nosso sistema de Login e Senha, prevenindo ataques e diminuindo o dano em caso de uma invasão bem sucedida.

Continuem acompanhando. Até o próximo!

 

Seja social. Compartilhe!