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

Sécurité Discussion :

Filtre Avec Password


Sujet :

Sécurité

  1. #1
    Membre averti Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Points : 403
    Points
    403
    Par défaut Filtre Avec Password
    Bonsoir tout le monde,
    je reviens à la charge avec un probleme de mot de passe.
    Dans une base relativement importante j'ai preparé un "module" de consultaion de données persos pour les utilisateurs, qui sont autour de 80 personnes.
    Afin que chacun ne puisse scruter que les infos le concernant, j'ai preparé un form de consultation reposant sur une requete avec comme critere de filtrage :
    [forms]![FiltreLogin]![login]
    dans le form de filtrage j'ai le script suivant qui permet de stocker les Logins/Password et apres routine de contrôle ouvre le form de consultation si OK.
    voici le script utilisé (merci BBIL)
    ===================
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Compare Database
    Option Explicit
    Private Type sLoginPw
    Login As String
    PW As String
    End Type
    Dim LoginPw(100) As sLoginPw ' adapter la dimension au besoin
    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
    Private Sub cmdValid_Click()
    Dim i As Integer, ok As Boolean
    For i = 1 To 100
    If Me!Login = LoginPw(i).Login And Me.PW = LoginPw(i).PW Then
    ok = True
    Exit For
    End If
    Next i
    If ok Then
    DoCmd.OpenForm "Consultation"
    DoCmd.Close acForm, Me.Name
    Else
    MsgBox "LOGIN OU PASSWORD ERRONE ! VEUILLEZ LES RESSAISIR", vbInformation
    DoCmd.Close acForm, Me.Name
    End If
    Erase LoginPw
    End Sub
    Private Sub Form_Load()
    Call Initialisation
    End Sub
     
    Sub Initialisation()
    Dim i As Integer
    For i = 1 To 100
    LoginPw(1).Login = "patrick"
    LoginPw(1).PW = "3637"
    LoginPw(2).Login = "Philippe"
    LoginPw(2).PW = "2623"
    LoginPw(3).Login = "Didier"
    LoginPw(3).PW = "3420"
    Next i
    End Sub

    ===================
    Vu le nombre d'utilisateurs, il me semblerait judicieux d'exploiter ma table personnel ou se trouve les noms et d'y rajouter une colonne "password" et de rassembler ces couples au moyen d'une requete ; plutot que de stocker 70 ou 80 ensembles Login/Password dans le script du formulaire de filtrage.
    Pour cela j'ai besoin d'aide pour modifier ce fameux script ou bien faut il repartir de zero ?
    Merci d'avance aux ames genereuses et surtout competentes du forum !

    Balises de code mises. je te laisse y penser pour les prochaines fois Merci.Faw


  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Bonjour,

    Dans un programme, j'ai déjà créé un truc dans votre genre qui nécessite :
    1) un formulaire de connexion
    2) une table qui sauvegarde les login/password et groupe d'utilisateur
    3) un formulaire qui permet de modifier selon le groupe d'utilisateur auquel on appartient :
    USER : ne peut changer que son mot de passe
    SUPERUSER : permet en plus d'ajouter des users et de désactiver un user, etc
    ADMIN : peut tout faire

    dans la table <utilisateurs> , les mots de passe sont cryptés, les logins sont uniques et les tables sont sur un serveur.

    la fonction pour tester le login du formulaire de connexion peut ressembler à ça avec fermeture du formulaire de connexion seulement:

    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
     
    private gbyNbTentatives as byte ' A initialiser à 0 dans le form_load()
     
    Private Sub cmdValid_Click()
    On Error GoTo errortag
        const cbyMaxLogin as byte = 3 'nombre maxi autorisé de tentative de connexion
       Dim oDb As dao.Database
       Dim rst As dao.Recordset
       Dim sSql As String
       Dim bBadLogin As Boolean, bClose As Boolean
     
       gbyNbTentatives  = gbyNbTentatives  + 1 'incrémente les tentatives
     
       If IsNull(Me.login) Or IsNull(Me.PW) Then
          bBadLogin = True
       Else
          Set oDb = CurrentDb
          ' Cherche l'utilisateur dans la table, en sachant que login ne peut contenir le caractère <'> ni <">
          sSql = "SELECT * FROM utilisateurs WHERE uti_actif = true AND uti_login = '" & Me.login & "'"
          Set rst = oDb.OpenRecordset(sSql, dbOpenSnapshot)
          If Not rst.EOF Then
          ' Vérifier que le mot de passe est égal au mot de passe saisie crypté   
          If rst("uti_mdp") = EncDecrypt(Me.PW) Then 'mdp ok
                bBadLogin = False
             Else 'mdp incorrect
                bBadLogin = True
             End If
          Else ' pas de login trouvé
             bBadLogin = True
          End If
       End If
       If bBadLogin = True Then 'si tentative mauvaise
          If gbyNbTentatives  < cbyMaxLogin Then 'si nb tentative < au maxi
             MsgBox "Identifiant et/ou Mot de Passe incorrect(s)." & vbCrLf & "Reste " & (giMaxLogin - i) & " tentative(s)...", vbInformation, "Connexion"
          Else 'si nb tentative >= maxi => on ferme
             MsgBox "Vous avez dépassé le nombre de tentatives autorisés..." & vbCrLf & "Fermeture du formulaire.", vbCritical, "Connexion"
             bClose = True
          End If
       End If
    fin:
       Set rst = Nothing
       Set oDb = Nothing
       If bBadLogin = False Then
          DoCmd.OpenForm "Consultation"
          DoCmd.Close acForm, Me.Name
       ElseIf bClose = True Then
          DoCmd.Close acForm, Me.Name 'fermeture du formulaire de connexion
       End If
       Exit Sub
    errortag:
       ' Mon traitement des erreurs
    End Sub
    voilà le principe !

    Philippe

  3. #3
    Faw
    Faw est déconnecté
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    1 169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 169
    Points : 1 383
    Points
    1 383
    Je ne comprends rien à Access...Mais je me soigne.
    Moteur de recherche
    DAO

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    en effet, c'est plus simple à répondre comme ça...

    amicalement,

    Philippe

  5. #5
    Membre averti Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Points : 403
    Points
    403
    Par défaut
    bonjour Philippe,
    je te remercie pour ta reponse.
    j'ai créé une table "Utilisateurs" avec les champs :
    Index(clé NumeroAuto)
    Login
    PW (avec masque de saisie en mot de passe dans les propriétés du champ au niveau de la table)

    Le formulaire "ControleAcces" avec 2 champs independants :
    - Login qui est alimenté par une liste deroulante des utilisateurs pris dans la table. avec masque de saisie en mot de passe dans les propriétés du champ au niveau du form.
    J'ai placé ton code dans le formulaire "ControleAcces" mais j'ai la msgbox d'erreur suivant quand je le lance :
    ================
    L’expression Sur clic entrée comme paramètre de la propriété de type événement est à l’origine d’une erreur. Sub ou Function non définie.
    * Le résultat de l’expression n’est pas le nom d’une macro, le nom d’une fonction définie par l’utilisateur ou [Event Procedure ].
    * Une erreur a peut-être été commise lors de l’évaluation d’une fonction, d’un événement ou d’une macro.
    ====================
    Alors dans cette ligne :

    sSql = "SELECT * FROM Utilisateurs WHERE uti_actif = true AND uti_login = '" & Me.Login & "'"

    peux-tu me dire à quoi correspondent uti_actif et uti_login et à quoi sert le petit "s" placé devant SQL ?

    Merci d'avance. Patrick


  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Bonjour,


    peux-tu me dire à quoi correspondent uti_actif et uti_login et à quoi sert le petit "s" placé devant SQL ?

    uti_actif et uti_login sont des champs de la table utilisateurs.

    uti_actif est un champ oui/non qui permet à un SuperUser ou un Administrateur d'activer ou de désactiver un utilisateur. Si un utilisateur est désactivé, il ne pourra plus se logger.

    le champ uti_login est un champ texte qui contient le login de l'utilisateur.

    le petit s devant SQL fait partie d'une convention d'écriture des variables. en voyant seulement sSql, je sais qu'il s'agit d'une variable String (s comme string). Cette convention s'étend bien sûr à l'ensemble des types de variables
    (Il y a un excellent tutoriel à ce sujet rédigé par notre maitre spirituel sur le site).

    sSql est donc la requête qui va ouvrir la table des utilisateurs et recherche le mot de passe du login saisie par l'utilisateur. Si uti_actif est faux pour ce login, son enregistrement n'est pas retourné par la requête.

    N'hésite pas si tu as d'autres questions.

    Philippe

  7. #7
    Membre averti Avatar de @rkane
    Homme Profil pro
    developpeur amateur dans mon cadre professionnel
    Inscrit en
    Juin 2006
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : developpeur amateur dans mon cadre professionnel
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 521
    Points : 403
    Points
    403
    Par défaut
    salut Philippe,
    Super genial... ça marche
    Ton script est super bien commenté.
    Juste 2 petites choses :
    - je me suis permis d'enlever le champ uti_actif because je n'en ai pas l'utilité.
    - J'ai dû remplacer : If rst("uti_mdp") = EncDecrypt(Me.PW) par : If rst("uti_mdp") = Me.PW
    car mes passwords ne sont pas cryptés, ils sont juste masqués par les étoiles. C'est sans doute interressant à etudier, mais sans detour... certainement trop ardu pour mon neurone.
    Encore merci pour ta precieuse collaboration.
    Patrick


  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Merci Patrick, sympa ton message !

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

Discussions similaires

  1. [Débutant] Résultat filtré avec CONTAINS ?
    Par mimicracra dans le forum Oracle
    Réponses: 17
    Dernier message: 17/07/2006, 15h11
  2. Filtre avec zone de liste déroulante
    Par petitloup71 dans le forum Access
    Réponses: 10
    Dernier message: 08/07/2006, 12h21
  3. Recherche et filtre avec un dynaset
    Par mat75019 dans le forum Access
    Réponses: 10
    Dernier message: 10/04/2006, 19h53
  4. [VB.Net] [login] probleme avec password recovery
    Par graphicsxp dans le forum ASP.NET
    Réponses: 5
    Dernier message: 17/02/2006, 14h53
  5. [Boite de dialogue] avec password
    Par vasilov dans le forum Composants
    Réponses: 6
    Dernier message: 10/08/2005, 14h34

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