IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Vérifier les spécifications des mots de passe [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 106
    Points : 97
    Points
    97
    Par défaut Vérifier les spécifications des mots de passe
    Bonjour,
    Les mots de passes que je désire utiliser doivent contenir:
    a) Un minimum de 7 caractères
    b) Au moins une lettre majuscule
    c) Au moins un chiffre

    Donc, Claude1954 serait un mot de passe valide.

    Voici une image pour plus d'informations, par la suite, le code utilisé
    sur le bouton CmdOK
    Nom : ChangerMotDePasse.jpg
Affichages : 293
Taille : 335,5 Ko

    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    Private Sub CmdOK_Click()
    On Error GoTo ErrTrap
        Dim QueryName As String
        Dim QueryName2 As String
        Dim Txt As String
     
        QueryName = IIf(Nz(Me.OpenArgs, "") = "Adm", _
                            "LoginPasswordAdm", "LoginPassword")
        QueryName2 = IIf(Nz(Me.OpenArgs, "") = "Adm", _
                            "LoginHistorique", "LoginHistorique")
        Txt = ""        ' Default
        If Len(Me.TxtUserID) > 0 And Len(Me.TxtPwd) > 0 Then
            Txt = Nz(DLookup("LoginMotDePasse", QueryName, _
                        "UTilisateurID = '" & Me.TxtUserID & "'"), "")
        End If
     
        If Len(Txt) > 0 And StrComp(Me.TxtPwd, _
                                                Txt, 0) = 0 Then
        Else
            MsgBox "Password Not Valid For This UserID"
            Me.TxtPwd.SetFocus
            GoTo ExitPoint
        End If
     
        If Len(Me.TxtPwdNew_1) > 0 And _
                    Len(Me.TxtPwdNew_2) > 0 And _
                    StrComp(Me.TxtPwdNew_1, _
                    Me.TxtPwdNew_2, 0) = 0 Then
            P_SetNewPassword QueryName
            P_SetNewDate QueryName
            P_SetNewHistorique
            MsgBox "Password Changed Successfully"
            DoCmd.Close acForm, Me.Name
        Else
            MsgBox "New Passwords 1 & 2 Do Not Match"
            Me.TxtPwdNew_1.SetFocus
        End If
     
    ExitPoint:
        On Error GoTo 0
        Exit Sub
     
    ErrTrap:
        MsgBox Err.Number & " - " & Err.Description
        Resume ExitPoint
    End Sub
     
    Private Sub P_SetNewPassword(ByVal TgtQueryName As String)
    On Error GoTo ErrTrap
        Dim Qst As String
        Dim db As DAO.Database
     
        Set db = DBEngine(0)(0)
     
        Qst = "UPDATE " & TgtQueryName & _
                " SET LoginMotDePasse = '" & Me.TxtPwdNew_1 & _
                "' Where UTilisateurID = '" & Me.TxtUserID & "';"
     
        db.Execute Qst, dbFailOnError
     
    ExitPoint:
        Set db = Nothing
        On Error GoTo 0
        Exit Sub
     
    ErrTrap:
        MsgBox Err.Number & " - " & Err.Description
        Resume ExitPoint
    End Sub
     
    Private Sub P_SetNewDate(ByVal TgtQueryName As String)
     
    On Error GoTo ErrTrap
        Dim Qst As String
        Dim db As DAO.Database
     
        Set db = DBEngine(0)(0)
     
        Qst = "UPDATE " & TgtQueryName & _
                " SET MotDePasseLastChanged = '" & Now() & _
                "' Where UTilisateurID = '" & Me.TxtUserID & "';"
                    CurrentDb.Execute Qst, dbFailOnError
     
        db.Execute Qst, dbFailOnError
     
    ExitPoint:
        Set db = Nothing
        On Error GoTo 0
        Exit Sub
     
    ErrTrap:
        MsgBox Err.Number & " - " & Err.Description
        Resume ExitPoint
    End Sub
     
    Private Sub P_SetNewHistorique()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
     
    'On Error GoTo ErrTrap
        Set dbs = CurrentDb
        Set rst = dbs.OpenRecordset("LoginHistorique", dbOpenDynaset)
     
    With rst
    .AddNew
    !UTilisateurID = Me.TxtUserID
    !MotDePasse = Me.TxtPwdNew_1
    !Nom = "User change login password"
    .Update
    End With
     
     
    'ExitPoint:
    '    Set dbs = Nothing
     '   Set rst = Nothing
     '   rst.Close
     '   dbs.Close
     
     
    'ErrTrap:
    '    MsgBox Err.Number & " - " & Err.Description
    '    Resume ExitPoint
    End Sub
    Merci d'avance à tous pour votre aide, de plus, ce code pourrait être utile à plusieurs utilisateurs qui recherchent un module de connexion

    Claude du Québec, Canada

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 593
    Points
    24 593
    Par défaut
    Bonjour,

    a) Un minimum de 7 caractères

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if len(password)>=7 then 'content
    b) Au moins une lettre majuscule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if password like "*[A-Z]*" then ' content
    c) Au moins un chiffre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if password like "*[0-9]*" then ' content
    Il y a un tuto sur l'opérateur Like. Pour du plus complexe il y a également un tuto sur les Regex.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 106
    Points : 97
    Points
    97
    Par défaut Ce code ne vérifie que la longueur du champ qui est de 7
    Bonjour,
    Voilà, au moins je peux changer un mot de passe et une erreur se produit lorsque ce nouveau mot de passe n'a pas 7 caractères de long.

    Est-ce que tu peux voir pourquoi après avoir vérifié la longueur du champ, ce code ne vérifie pas les autres elseIf.

    Lorsque le champ est de 7 caractères que ce soit 1111111 ou aaaaaaa ou AAAAAAA le mot de passe est accepté.
    Moi j'essai:
    1- Lorsque le mot de passe contient 7 caractères, vérifie s'il contient au moins 1 caractère alphabétique minuscule.

    2- Lorsque ce dernier est vérifié, vérifie s'il contient au moins 1 caractère alphabétique minuscule et 1 caractère alphabétique majuscule.

    3- Lorsque ces 2 derniers sont vérifiés, vérifie s'il contient au moins 1 caractère alphabétique minuscule, 1 caractère alphabétique majuscule, 1 caractère numérique et une longueur de 7 caractères.

    À chaque étape si le mot de passe n'est pas valide, un message (formulaire) nommé "MessageMotDePasseInvalide" doit apparaître.

    Je me sers de "DoCmd.OpenForm "MessageMotDePasseInvalide" dans ce code que voici:

    J'ai placé ce code dans l'évènement après MAJ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Private Sub TxtPwdNew_1_AfterUpdate()
         Dim q
         Dim special As Boolean
         Dim no As Boolean
         Dim str As Boolean
         Dim test As Integer
         Dim invalid As Boolean
         Dim pwrdTest As Boolean
         Dim pwd As String
     
         Const minCharacters = 7
     
         invalid = False
         special = False
         no = False
         str = False
         pwrdTest = False
     
         pwd = Me.TxtPwdNew_1
     
        If Len(pwd) >= minCharacters Then
        For q = 1 To Len(pwd)
             test = Asc(Mid(pwd, q, 1))
             If test > 97 And test < 122 Then 'check lower case alpha
                       str = True
             ElseIf test >= 65 And test <= 90 Then 'check upper case alpha
                       str = True
             ElseIf test >= 48 And test <= 57 Then 'check number
                       no = True
             ElseIf test = 32 Then 'invalid
                       invalid = True
             End If
        Next
        If str And no And Not invalid Then
               pwrdTest = True
        End If
    Else
        DoCmd.OpenForm "MessageMotDePasseInvalide"
        Me.TxtPwdNew_1.SetFocus
        Exit Sub
    End If
    End Sub
    J'ai essayé avec ce que tu m'as fait parvenir auparavant, mais cela ne marchait pas, serais-tu assez aimable pour faire les changements dans ce code.

    Merci
    Claude du Québec

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 593
    Points
    24 593
    Par défaut
    Pourquoi tu utilises une boucle for alors que tu peux t'en passer ?

    Utilises le code que je t'ai fourni.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    If contient 7 then
       if contient majuscule then
         if contient nombre then
            c'est bon 
         else
            problème
         endif
       else
           problème
       endif
    else 
     problème
    endif
    ou sinon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If not contient 7 then goto problème
    if not contient majuscule then goto problème
    if not contient nombre then goto problème
    Le plus rapide et le plus simple est souvent le meilleur.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 593
    Points
    24 593
    Par défaut
    En ce qui concerne ton code :

    Cette approche est fausse. En effet tu affecte vrai dès la première vérification sans te soucier des autres.

    Exemple : si la première vérification est vrai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If test > 97 And test < 122 Then 'check lower case alpha
                       str = True
    A aucun moment tu ne n'affirme que l'une des suivantes peut être fausse.

    Si tu traces il devrait passer partout mais comme c'est déjà vrai ça le reste même si les autres sont fausses.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. les bonnes pratiques de gestions des mots de passe
    Par XDavidX dans le forum Sécurité
    Réponses: 2
    Dernier message: 04/02/2015, 15h19
  2. Réponses: 3
    Dernier message: 18/12/2013, 11h18
  3. Bloquer les IP qui essayent des mots de passe
    Par gilles_906 dans le forum Développement
    Réponses: 15
    Dernier message: 28/11/2012, 10h29
  4. Comment fonctionne l'enregistrement des mots de passe dans les navigateurs ?
    Par monstroplante dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 26/08/2011, 15h28
  5. Réponses: 0
    Dernier message: 15/03/2010, 09h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo