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 :

Bloquer l'accès à l'environnement vba


Sujet :

Sécurité

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 74
    Points : 57
    Points
    57
    Par défaut Bloquer l'accès à l'environnement vba
    Bonjour,

    Ma base de données est déjà bien protéger, mais il reste une dernière faiblesse. Dans le cas (hautement improbable je l'espère) où il y aurait une erreur, l'utilsateur à la liberté d'accéder directement au code en appuyant sur debug. J'aimerais pouvoir depuis une instruction vba bloquer ce bouton ou simplement l'accès à l'environement.

    Ceci est il possible , si oui comment ?

    Merci d'avance

  2. #2
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonsoir,

    Si un utilisateur a accès au bouton de débogage, c'est que le module s'est ouvert.
    Ce qui ne doit pas arriver.
    Pour éviter cela, il te faut exploiter la gestion des erreurs pour chacun de tes codes.

    Cordialement

    Christophe

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 74
    Points : 57
    Points
    57
    Par défaut
    C'est ce que j'ai essayé de faire mais pas moyen d'y arriver, quique je fasse je retombe sur la fenêtre qui me propose de debuger le code. Exemple d'essai non frucutueu :

    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
     
     
    Private Sub cmdOpenEditModule_Click()
    On Error GoTo Err_cmdOpenEditModule_Click
        If Not AllowEdit Then
            MsgBox ("You are not allow to edit")
        Else
            If Me.txtNumbModules = 0 Then
                MsgBox "There is no Module"
            Else
                Dim stDocName As String
                Dim stLinkCriteria As String
                stLinkCriteria = "T_Modules.OrderNumber = [Formulaires]![frmMain]![sfmModulesList].[Formulaire]![txtOrderNumber]"
     
                declaration.EditModule = True
                stDocName = "frmViewModule"
                DoCmd.OpenForm stDocName, , , stLinkCriteria
            End If
        End If
     
    Exit_cmdOpenEditModule_Click:
        Exit Sub
     
    Err_cmdOpenEditModule_Click:
        MsgBox "An error has occured"
       ' Resume Exit_cmdOpenEditModule_Click
     
    End Sub
    Peut être ai je mal compris la documentation fournit sur internet en ce qui concerne les errueurs.

    Pour info l'errueur qui survient est du au fait que le lancement du nouveau formulaire entraine la création d'une requête, mais ça bug si cette requête existe déjà...

  4. #4
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonjour,

    Ok, donc il te faut vérifier auparavant si ta requête existe et donc la supprimer avant d'en recréer une nouvelle.

    Si je ne me trompe, il y a un exemple dans la FAQ soit pour les tables, soit pour les requêtes.

    Cordialement

    Christophe

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir
    Pour répondre à la question d'origine "Bloquerl'accès à l'environnement Vba" il suffit de distribuer l'application en Mde ou Accde suivant la version Office.
    Par contre cela nécessite effectivement une gestion d'erreur pointue, pour que l'application ne plante pas.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 74
    Points : 57
    Points
    57
    Par défaut
    Bonjour,

    Merci marsouin_89, le truc c'est que j'utilise un nombre incalculable de fois une même requête temporaire que je détruis à chaque fois et je n'ai aps trop le courage de revenir sur toutes ces procèdures. L'erreur n'est pas censé ce produire. Mais dans le cas ou elle se produirait j'aimerais juste avoir un autre mesage que celui fournit par access.

    GAYOT, j'y ai pensé, mas ce n'est pas envisageable. La base de données doit resté en mdb pour être modifiée et améliorée dans le future.

    J'ai vu qu'on pouvait changer les messages d'eurreurs fournit pas access mais toutes mes tentavies ont été veines.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par kawaya Voir le message
    Bonjour,
    GAYOT, j'y ai pensé, mas ce n'est pas envisageable. La base de données doit resté en mdb pour être modifiée et améliorée dans le future.
    .
    Même en distribuant une version mde, il faut toujours conserver la version mdb.

    On finalise la mdb, puis on la convertit en mde (c'est un autre fichier) et c'est celui ci que l'on distribue. On peut donc toujours faire des évolutions et modifications.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 74
    Points : 57
    Points
    57
    Par défaut
    Je vois. Mais si on veut faire des modification disons dans un an. De nombreuses données seront sur le fichier mde et pas sur le mdb ce qui pose problème.
    J'ai l'ipression qu'il faudra alors copier tout les enregistrement du mde dans l'évolution du mdb. Je me trompe ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    D'où l'intérêt de fractionner une application en dorsale/frontale. Comme cela on ne distribue que l'applicatif et on ne touche pas aux données.

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 74
    Points : 57
    Points
    57
    Par défaut
    Ha, ça alors pratique comme solution ! Malheureusement faut que je finisse le logiciel d'ici demain et je n'ai pas suffisament de temps pour me pencher sur cette solution. Du coup je me suis retourné vers un bout de code trouvé sur le forum :

    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
     
    Public Function SetStartupProperties()
     
        On Error Resume Next
        ChangeProperty "AppTitle", dbText, "diversityDatabase1.23"
            ChangeProperty "StartupShowDBWindow", dbBoolean, False
            ChangeProperty "StartupShowStatusBar", dbBoolean, False
            ChangeProperty "AllowFullMenus", dbBoolean, False
            ChangeProperty "AllowShortcutMenus", dbBoolean, False
            ChangeProperty "AllowBuiltinToolbars", dbBoolean, False
            ChangeProperty "AllowToolbarChanges", dbBoolean, False
            ChangeProperty "AllowBreakIntoCode", dbBoolean, False
            'ChangeProperty "AllowBypassKey", dbBoolean, False
            ChangeProperty "AllowSpecialKeys", dbBoolean, False
     
    End Function
     
    Private Function ChangeProperty(strPropName As String, varPropType As Variant, varPropValue As Variant) As Integer
        Const conPropNotFoundError = 3270
        Dim dbs As Database
        Dim prp As Property
     
        Set dbs = CurrentDb
        On Error GoTo Change_Err
        dbs.Properties(strPropName) = varPropValue
        ChangeProperty = True
     
    Change_Bye:
        Exit Function
     
    Change_Err:
        If Err = conPropNotFoundError Then  ' Property not found.
            Set prp = dbs.CreateProperty(strPropName, varPropType, varPropValue)
            dbs.Properties.Append prp
            Resume Next
        Else ' Unknown error.
            ChangeProperty = False
            Resume Change_Bye
        End If
    End Function
    Cependant j'aimerais pouvoir utiliser un bouton administrateur pour passer toutes ces propriétés à true

    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
     
    'fonction appelé sur le clik d'un bouton
    Public Function SetStartupPropertiesAdmin()
         On Error Resume Next
        ChangeProperty "AppTitle", dbText, "diversityDatabase1.23"
            ChangeProperty "StartupShowDBWindow", dbBoolean, True
            ChangeProperty "StartupShowStatusBar", dbBoolean, True
            ChangeProperty "AllowFullMenus", dbBoolean, True
            ChangeProperty "AllowShortcutMenus", dbBoolean, True
            ChangeProperty "AllowBuiltinToolbars", dbBoolean, True
            ChangeProperty "AllowToolbarChanges", dbBoolean, True
            ChangeProperty "AllowBreakIntoCode", dbBoolean, True
            'ChangeProperty "AllowBypassKey", dbBoolean, True
            ChangeProperty "AllowSpecialKeys", dbBoolean, False
    End Function
    Mais ça ne marche pas, il faut fermer puis rouvrir la base pour ques la modifications des propriétés soit prise en compte.
    J'aurais besoin que cette solution soit dynamique.
    Y aurait il moyen de faire cela avec le ode ci dessus ?

  11. #11
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonsoir,

    Là tu fais le fainéant. Le code qui permet d'analyser si oui ou non une requête existe ne comprend que quelques lignes et il te renvoi un booléan.

    Concernant, la modification des paramètres d'environnement, tu as la solution d'utiliser un fichier *.reg pour faire les modification avant l'ouverture de ton application.
    Cela dit, je ne sais pas si tu peux tout modifier.
    Je n'ai pas mon PC habituel sous la main, mais si tu veux, je peux te mettre un exemple demain matin.

    Enfin, essaies de prendre le temps de comprendre et savoir comment fractionner une application car c'est la meilleur solution pour faire évoluer une application tout en conservant les données de ta base de données.

    Cordialement

    Christophe

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 74
    Points : 57
    Points
    57
    Par défaut
    Le petit hic avec verrifier si la requête existe c'est que ça prend un peu de temps et donc ça ralentit un peu l'appli (j'ai essayé et bon ça ne prend que 10 sec, mais déjà que moi ça m'embête j'ai peur que ça embête les autre. Après peut être que j'utilise une fonction un peu lourde :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim qdf As DAO.QueryDef
        'Browse all the queries and delete the only temporary queries "sqlChamp" and "sqlXcl"
        For Each qdf In CurrentDb.QueryDefs
            If qdf.Name = "sqlChamp" Then
                 DoCmd.DeleteObject acQuery, "sqlChamp"
            End If
        Next
    Jamais entendu parler de *.reg ! Je vais regarder ça. Et pour la fraction si j'avais deux semaine de plus je m'y serais essayé, mais la je suis "out of time"

    En tout cas merci de m'aider

  13. #13
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonjour,

    Voici un exemple de fichier reg.
    Je l'utilise lorsque je distribue mes applications pour la première fois.

    NB : c'est pour Access 2007, donc si je ne me trompe, changer 12.0 par 13.0 pour Office 2010 ou 14.0 pour Office 2013.

    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
    Windows Registry Editor Version 5.00
     
    ;Défini l'emplacement d'installastion de l'application afin de ne pas avoir de verrou de sécurité
    [HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\Location0]
    ; Doubler chaque anti slash ex : C:\\Monrepertoire\\MonAppli
    "Path"="Chemin du répertoire de l'application"
    "AllowSubfolders"=dword:00000001
     
    ;Active les macros
    [HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Access\Security]
    "VBAWarnings"=dword:00000001
     
    ;Options Access
    [HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Access\Settings]
    "Confirm Record Changes"=dword:00000000
    "Confirm Action Queries"=dword:00000000
    "ShowWindowsInTaskbar"=dword:00000000
    "Show System Objects"=dword:00000000
    "Show Hidden Objects"=dword:00000001
    "OLE/DDE Timeout (sec)"=dword:00000002
    "Refresh Interval (sec)"=dword:00000002
    "Number of Update Retries"=dword:0000000a
    "ODBC Refresh Interval (sec)"=dword:00000002
    "Update Retry Interval (msec)"=dword:00000005
    "Show Startup Dialog Box"=dword:00000000
    "Enable DDE Refresh"=dword:00000001
    "Default Database Directory"="D:\\"
    Cordialement

    Christophe

Discussions similaires

  1. [Formulaire][VBA] Bloquer l'accès par mot de passe
    Par sumtech dans le forum Sécurité
    Réponses: 2
    Dernier message: 17/04/2007, 16h25
  2. Bloquer l'accès à une page en fonction du navigateur
    Par 10-nice dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 30/08/2005, 15h29
  3. bloquer l'accès à un 1 champ d 1 colonne d'un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/08/2005, 08h42
  4. Bloquer les accès à certains sites
    Par Polskynet dans le forum Administration
    Réponses: 2
    Dernier message: 25/02/2005, 09h49

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