Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Sécurité
Sécurité Le forum qui s'occupe de votre préoccupation de sécuriser l'accès à votre application Access, ainsi qu'à la sécurité des données.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/06/2006, 23h15   #1
Membre éclairé
 
Avatar de @rkane
 
Homme Patrick
developpeur amateur dans mon cadre professionnel
Inscription : juin 2006
Messages : 499
Détails du profil
Informations personnelles :
Nom : Homme Patrick
Âge : 52
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 : 499
Points : 360
Points : 360
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 :
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 :
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
@rkane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2006, 06h12   #2
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
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 :
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
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2006, 06h30   #3
Faw
Membre Expert
 
Inscription : juin 2004
Messages : 1 169
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 1 169
Points : 1 162
Points : 1 162
Envoyer un message via MSN à Faw
salut,

http://access.developpez.com/faq/?page=TAAdmin#login
Et pour pousser un peu plus loin
http://access.developpez.com/faq/?pa...eral#SecuUsers
__________________
Je ne comprends rien à Access...Mais je me soigne.
Moteur de recherche
DAO
Faw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2006, 06h44   #4
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
en effet, c'est plus simple à répondre comme ça...

amicalement,

Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2006, 08h47   #5
Membre éclairé
 
Avatar de @rkane
 
Homme Patrick
developpeur amateur dans mon cadre professionnel
Inscription : juin 2006
Messages : 499
Détails du profil
Informations personnelles :
Nom : Homme Patrick
Âge : 52
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 : 499
Points : 360
Points : 360
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
@rkane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2006, 21h25   #6
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
Bonjour,

Citation:

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
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 10h26   #7
Membre éclairé
 
Avatar de @rkane
 
Homme Patrick
developpeur amateur dans mon cadre professionnel
Inscription : juin 2006
Messages : 499
Détails du profil
Informations personnelles :
Nom : Homme Patrick
Âge : 52
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 : 499
Points : 360
Points : 360
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
@rkane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 22h31   #8
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
Merci Patrick, sympa ton message !
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h54.


 
 
 
 
Partenaires

Hébergement Web