ACC2000 : Procédure pour créer un formulaire ou un état protégé par mot de passe

Niveau avancé : exige une réelle expertise en termes de programmation, d'interopérabilité et d'environnement multi-utilisateur.


Cet article s'applique uniquement à une base de données Microsoft Access (.mdb).


Résumé

Microsoft Access offre deux fonctionnalités de sécurité intégrées pour la protection de votre base de données :

  • Comptes et autorisations d'utilisateurs/groupes
  • Mots de passe de base de données
Cet article explique comment vous pouvez définir des mots de passe individuels pour chaque formulaire et pour chaque état de votre base de données.

Plus d'informations

Microsoft fournit des exemples de programmation à titre indicatif uniquement, sans garantie expresse ou implicite, notamment toute garantie implicite de qualité et d'adéquation à un usage particulier. Pour comprendre cet article, vous devez posséder une bonne connaissance du langage de programmation mentionné et des outils utilisés pour la création et le débogage des procédures. Les techniciens du Support technique Microsoft peuvent vous aider à comprendre la fonctionnalité d'une procédure, mais ils ne modifieront pas ces exemples afin de fournir des fonctionnalités supplémentaires ou des procédures de construction adaptées à vos besoins spécifiques. Si votre expérience en matière de programmation est limitée, vous pouvez contacter un Partenaire certifié Microsoft (MCP) ou appeler la ligne de consultation payante de Microsoft au 09 70 01 90 90. Pour plus d'informations sur les Partenaires certifiés Microsoft, consultez le site Web suivant :

Pour plus d'informations sur les options de support disponibles et sur la façon de contacter Microsoft, visitez le site Web Microsoft suivant :

ATTENTION : Si vous suivez les étapes décrites dans cet exemple, vous modifiez la base de données exemple Northwind.mdb. Le cas échéant, vous pouvez effectuer une copie de sauvegarde de ce fichier puis exécuter la procédure sur la copie de la base de données.

REMARQUE : Le code exemple figurant dans cet article utilise des objets Microsoft DAO (Data Access Objects). Pour que ce code fonctionne correctement, vous devez faire référence à la bibliothèque d'objets Microsoft DAO 3.6. Pour ce faire, cliquez sur Références dans le menu Outils de Visual Basic Editor, puis assurez-vous que la case à cocher Bibliothèque d'objets Microsoft DAO 3.6 est activée.

Utilisation de code pour protéger par mot de passe un formulaire

En utilisant du code, vous pouvez demander à l'utilisateur d'entrer un mot de passe lorsqu'il ouvre un formulaire ou un état. Le formulaire ou l'état ne s'ouvre que si le mot de passe correct est entré.

L'exemple suivant indique comment protéger par mot de passe le formulaire Orders dans la base de données exemple Northwind.mdb :

  1. Démarrez Access et ouvrez la base de données exemple Northwind.mdb.
  2. Appuyez sur ALT+F11 pour démarrer L'Éditeur Visual Basic.
  3. Dans le menu Insertion, cliquez sur Module.
  4. Dans la feuille de module, tapez la procédure suivante :
    Public MyPassword
    Public Function KeyCode(Password As String) As Long
    ' Cette fonction produit une clé unique pour la
    ' chaîne qui est transmise en tant que mot de passe.
    Dim I As Integer
    Dim Hold As Long

    For I = 1 To Len(Password)
    Select Case (Asc(Left(Password, 1)) * I) Mod 4
    Case Is = 0
    Hold = Hold + (Asc(Mid(Password, I, 1)) * I)
    Case Is = 1
    Hold = Hold - (Asc(Mid(Password, I, 1)) * I)
    Case Is = 2
    Hold = Hold + (Asc(Mid(Password, I, 1)) * _
    (I - Asc(Mid(Password, I, 1))))
    Case Is = 3
    Hold = Hold - (Asc(Mid(Password, I, 1)) * _
    (I + Len(Password)))
    End Select
    Next I
    KeyCode = Hold
    End Function
  5. Appuyez sur ALT+F11 pour retourner dans Access.
  6. Dans la fenêtre Base de données, sous Objets, cliquez sur Tables, puis cliquez sur Nouveau.
  7. Dans la boîte de dialogue Nouvelle table, double-cliquez sur Mode Création.
  8. Créez une nouvelle table en procédant comme suit :

    Table: tblPassword
    ---------------------------
    Field Name: ObjectName
    Data Type: Text
    Field Size: 50
    Field Name: KeyCode
    Data Type: Text
    Field Size: 25
    Input Mask: Password

    Table Properties: tblPassword
    -----------------------------
    PrimaryKey: ObjectName
  9. Ouvrez la table tblPassword, puis entrez les données suivantes :

    ObjectName: Orders
    KeyCode: 2818
  10. Créez un formulaire en mode création et enregistrez-le sous le nom frmPassword.
  11. Ajoutez une zone de texte nommée Text0 à frmPassword, et un bouton de commande nommé CheckPassword.
  12. Définissez la propriété Input Mask de Text0 à « PASSWORD » (sans les guillemets).
  13. Ajoutez le code suivant à l'événement OnClick du bouton CheckPassword, puis enregistrez le formulaire :
    If IsNull(Forms!frmPassword!Text0.Value) Then
    MsgBox "Vous ne pouvez pas entrer un mot de passe vide. Réessayez."
    Me!Text0.SetFocus
    Else
    MyPassword = Me!Text0.Value
    DoCmd.Close acForm, "frmPassword"
    End If
  14. Ouvrez le formulaire Orders en mode Création.
  15. Si la feuille de propriétés n'est pas visible, cliquez sur Propriétés dans le menu Affichage.
  16. Tapez la procédure événementielle suivante dans le module pour la propriété OnOpen du formulaire :
    Private Sub Form_Open(Cancel as Integer)
    Dim Hold As Variant
    Dim tmpKey As Long
    Dim I As Integer
    Dim rs As DAO.Recordset
    Dim db As DAO.Database

    On Error GoTo Error_Handler
    ' Demande le mot de passe à l'utilisateur.
    DoCmd.OpenForm "frmPassword", acNormal, , , , acDialog
    Hold = MyPassword
    ' Ouvre la table qui contient le mot de passe.
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tblPassword", dbOpenTable)
    rs.Index = "PrimaryKey"
    rs.Seek "=", Me.Name
    If rs.NoMatch Then
    MsgBox "Désolé, informations de mot de passe introuvables. Réessayez."
    Cancel = -1
    Else
    ' Teste si la clé générée correspond à celle de la
    ' table ; s'il n'y a pas de correspondance, arrête
    ' l'ouverture du formulaire.
    If Not (rs![keycode] = KeyCode(Cstr(Hold))) Then
    MsgBox "Désolé, vous avez entré un mot de passe incorrect." & _
    "Réessayez.", vbOKOnly, "Mot de passe incorrect"
    Cancel = -1
    End If
    End If
    rs.Close
    db.Close
    Exit Sub

    Error_Handler:
    MsgBox Err.Description, vbOKOnly, "Error #" & Err.Number
    Exit Sub
    End Sub
  17. Fermez et enregistrez le formulaire Orders.
  18. Ouvrez le formulaire Orders, puis tapez PASSWORD lorsqu'un mot de passe vous est demandé.

    Notez que le formulaire Orders s'ouvre. Le KeyCode qui est généré par PASSWORD correspond à celui de la table tblPassword, et dépend de la casse des lettres du mot de passe entré.
  19. Fermez et rouvrez le formulaire Orders, puis tapez PassWord lorsqu'un mot de passe vous est demandé.

    Le message suivant s'affiche :

    Désolé, vous avez entré un mot de passe incorrect. Réessayez.
    Le formulaire Orders ne s'ouvre pas parce que la procédure de mot de passe est sensible à la casse.
  20. Pour déterminer quel est le KeyCode correspondant d'une chaîne particulière, tapez ce qui suit dans la fenêtre Exécution et appuyez sur ENTRÉE :

    ?KeyCode("TestString")
    L'exemple précédent retourne 5864.
  21. Pour masquer la table tblPassword dans la fenêtre Base de données, cliquez avec le bouton droit sur la table tblPassword, puis cliquez sur Propriétés. Dans la fenêtre Propriétés, sélectionnez la case à cocher Masqué, puis cliquez sur OK.
Propriétés

ID d'article : 209871 - Dernière mise à jour : 26 janv. 2012 - Révision : 1

Commentaires