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 :

Proteger masquer tables, requêtes, etats, macros, etc. à l'ouverture


Sujet :

Sécurité

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 23
    Points
    23
    Par défaut Proteger masquer tables, requêtes, etats, macros, etc. à l'ouverture
    Bonjour,

    je souhaiterai masquer les tables, requettes, etats, macros, etc... à l'ouverture de ma base. J'ai crée un formulaire qui s'affiche au démarrage, ok.
    Par contre, j'ai vu pas mal de sujet sur la manière de masquer le volet de navigation et autres menus, mais on peut aussi réafficher tout ça par [MAJ] ou [SHIFT] au lancement de la Db.

    Du coup, je ne sais pas comment faire.

    Merci de votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Première étape déterminer quelle niveau de protection tu as REELEMENT besoin.

    1. Si tes utilisateurs ne sont pas des fouineurs, tu peux décider de tous laisser visible, l'avantage de cette solution c'est sa simplicité.

    2. Si c'est pour des raisons esthétiques ou pour ne pas mélanger tes utilisateurs (qui ne sont pas fouineurs), tu peux juste cacher les objets en laissant la touche MAJ active. En allant dans les options de la BD courante cela se fait facilement.
    3. Si tu veux une protection qui résiste (raisonnablement aux fouineurs) voici du code qui fait cela

      Il faut lancer HideAll et DisableSepcialKey.
      Il faut protéger le code par un mot de passe.
      Pour accéder au code et faire tout réapparaître taper [Alt][F11], entrer le mot de passe et lancer UnhideAll.

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Option Compare Database
      Option Explicit
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      Public Enum eAccessVersion
          A1995 = 7
          A1997 = 8
          A2000 = 9
          A2002 = 10
          A2003 = 11
          A2007 = 12
          A2010 = 14
      End Enum
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      Public Function GetAccessVersionID() As eAccessVersion
         GetAccessVersionID = CLng(Val(SysCmd(acSysCmdAccessVer))) 'Convert the string to a valid integer, whatever language setting is used
      End Function
      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
      Public Sub HideAll()
       
          If Not mdlGlobalVariableConstant.MODE_DEBUG Then
       
                  Select Case GetAccessVersionID
                      Case eAccessVersion.A2003, eAccessVersion.A2002
                          Call HideAllMenu
       
                          'Hide the database window
                          DoCmd.SelectObject acTable, , True
                          DoCmd.RunCommand acCmdWindowHide
       
                          'Prevent the db from opening up a separate window tab on the Taskbar
                          Application.SetOption "ShowWindowsinTaskbar", False
       
                      Case eAccessVersion.A2007, eAccessVersion.A2010
                          'Hide the navigation pane
                          'DoCmd.NavigateTo "acNavigationCategoryObjectType" 'Not compiling in Access 2003
                          DoCmd.SelectObject acModule, , True
                          DoCmd.RunCommand acCmdWindowHide
       
                          DoCmd.ShowToolbar "Ribbon", acToolbarNo
       
                      Case Else
                          Error 5 'Should never happen
       
                  End Select
              Else
                  Call UnhideAll
          End If
       
      End Sub
      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
      Public Sub UnhideAll()
          'Get the menus and other things back to life.
       
          On Error GoTo Err_UnhideAll
       
          Select Case GetAccessVersionID
              Case eAccessVersion.A2003
                  'Just to make sure the main menu is really back
                  CommandBars("Menu Bar").Enabled = True
                  CommandBars("Menu Bar").Visible = True
       
                  Call UnhideAllMenu
       
                  'Unhide the database window
                  DoCmd.SelectObject acModule, , True
       
              Case eAccessVersion.A2007, eAccessVersion.A2010
                  DoCmd.ShowToolbar "Ribbon", acToolbarYes
       
                  'Unhide the navigation pane
                  DoCmd.SelectObject acModule, , True
       
              Case Else
                  Error 5 'Should never happen
       
          End Select
       
      Exit_UnhideAll:
          Exit Sub
       
      Err_UnhideAll:
          Select Case Err.Number
              Case 2544
                  'OK, no table just ignore the problem
                  Resume Next
       
              Case Else
                  MsgBox "Error : " & Err.Number & ", " & Err.Description, vbExclamation
          End Select
       
          Resume Exit_UnhideAll
      End Sub
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      Private Sub HideAllMenu()
          'Hide all menus
          Dim i As Integer: For i = 1 To CommandBars.Count
              CommandBars(i).Enabled = False
          Next i
      End Sub
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      Private Sub UnhideAllMenu()
          'Show all menus
          Dim i As Integer: For i = 1 To CommandBars.Count
              CommandBars(i).Enabled = True
          Next i
      End Sub
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      Private Sub EnableSpeciaKey()
          Call SetProperty("AllowBypassKey", dbBoolean, True)
      End Sub
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      Private Sub DisableSpeciaKey()
          Call SetProperty("AllowBypassKey", dbBoolean, False)
      End Sub
      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
      Private Function SetProperty( _
                          prmPropertyName As String, _
                          prmPropertyType As Variant, _
                          prmPropertyValue As Variant) As Boolean
       
          On Error GoTo Err_SetProperty
       
          Dim db As DAO.Database, p As DAO.Property
       
          Set db = CurrentDb
          db.Properties(prmPropertyName) = prmPropertyValue
          SetProperty = True
          Set db = Nothing
       
      Exit_SetProperty:
          Exit Function
       
      Err_SetProperty:
       
          Select Case Err.Number
              Case 3270 'Property not found
                  Set p = db.CreateProperty(prmPropertyName, prmPropertyType, prmPropertyValue)
                  db.Properties.Append p
                  Resume Next
              Case Else
                  SetProperty = False
                  MsgBox "Error : " & Err.Number & ", " & Err.Description, vbExclamation
                  Resume Exit_SetProperty
          End Select
       
      End Function
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 23
    Points
    23
    Par défaut
    merci à toi je vais tester le code.
    j'avais testé aussi l'option runtime, en modifiant l'extention par accdr.
    Cela fonctionne, mais la manip inverse c.a.d remettre l'extension de la base en accdb avant ouverture, annule ce principe.

    D'une manière générale, pour "verrouiller" une base, ce code est donc l'ultime verrou ?
    .... ou pas ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 23
    Points
    23
    Par défaut
    Arggg
    J'ai un message d'erreur au démarrage...je m'explique

    1) j'ai bien recopié ton/tes lignes de code dans un module,
    2) protégé par mot de passe l'access/visu au module par Visual Basic Editor (Outils/Propriétés du projet/Protection)
    3) créé une macro nommée "AutoExec" avec 2 lignes ExecuterCode : HideAll et DisableSpecialKey
    4) laissé l'option afficher le formulaire avec le nom de mon formulaire au démarrage.

    Je relance ma Db et j'ai le message :
    Citation Envoyé par Access
    Impossible pour Mircosoft Office Access de trouver le nom "HideAll" entré dans l'expression

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Non ce n'est pas l'ultime protection mais c'est suffisant pour décourager le fouineur standard.

    Vérifie que ton code compile bien.

    La protection du code n'est pas nécessaire pour tester le masquage ni le disableSpecialKey.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 23
    Points
    23
    Par défaut
    alors, qd je positionne le curseur au début de Public Sub HideAll()
    puis F8 Execution pas à pas, msg :"Erreur de compilation, Variable non definie"

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 23
    Points
    23
    Par défaut
    semble être mdlGlobalVariableConstant au debut de HideAll()

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Opps j'ai oubli de preciser cela :

    soit faire sauter le test sur MODE_DEBUG.

    Soit creer un module nomme :

    mdlGlobalVariableConstant
    et y mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public const MODE_DEBUG as boolean = false
    Cette constante me sert a neutraliser certaine partie de code quand je fais du debuggage. Par exemple dans ma version de développement je souhaite que mes objets restent visibles. Donc en développement je mets =True et en production je mets =False.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 23
    Points
    23
    Par défaut
    Argg
    je dois mal m'y prendre. J'ai le même message au démarrage.

    Quandd je lance ma Db et j'ai le même message :
    Impossible pour Mircosoft Office Access de trouver le nom "HideAll" entré dans l'expression
    Pour info,
    dans Visual Basic Editor, j'ai mis tous les codes que tu avais écris dans le module1, à la suite
    j'ai rajouté en début de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub HideAll()
     Public Const MODE_DEBUG As Boolean = False
        If Not mdlGlobalVariableConstant.MODE_DEBUG Then
    ...
    j'ai sauvegardé le module et relancer

    Merci infiniment de ton aide

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 23
    Points
    23
    Par défaut
    Hello,
    Access ne semble pas voir les codes HideAll et DisableSpecialKey

    car lorsque dans une Macro je choisis "ExecuterCode" puis générateur d'expression, il voit bien mes differents modules mais ne me propose pas les codes...
    en fait il ne me propose que GetAccessVersionID, des codes que tu m'as fournis

    désolé d'être une "quiche" en VBA pour debugger et trouver ...

    Help !

  11. #11
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Si je me souviens bien, les routines "Sub" en VBA ne sont pas exécutable dans une macro avec ExécuterCode. Il faut utiliser une fonction.
    La solution serait de Transformer les "Public Sub" en "Public Function"

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    C'est probablement parce que les macros marchent avec des fonctions plutôt que des procédures.

    Remplace les Public Sub par des Public Function cela devrait résoudre le problème.

    Personnellement j'utilise un formulaire de démarrage au lieu de la macro AutoExec donc cela ne m'a pas posé de problème.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 23
    Points
    23
    Par défaut
    Merci de votre aide, je vais tester et remplacer par public function
    je vous reviens après pour vous dire...

    Par contre, comme j'ai aussi un formulaire en ouverture, à votre avis
    ma macros AutoExec pourrait alors être supprimée si je mets dans mon formulaire en événement sur activation ? sur chargement ?

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    sur chargement
    Personnellement je suis un fan de VBA et pas du tout des macros mais en realite les 2 solutions sont bonnes.

    Il faut voir ce qui est le plus logique dans ton application. Si ton formulaire n'est pas un Splah Screen (formulaire d'attente pendant le demarrage) ce n'est peut-etre pas necessaire.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  15. #15
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Points : 23
    Points
    23
    Par défaut
    Génial, yesss
    cela fonctionne parfaitement en remplaçant les Sub par Function et en remplacant les Private par Public
    la macro AutoExec lance bien les codes

    par contre, c'est irrémédiable une fois éxecuté, il faut avoir fait une copie au préalable sans Autoexec, si on veut redevelopper son projet
    le top serait d'avoir à l'ouverture un login psw admin
    comme ça en fonction on active ou desactive les affichages et restricitons
    on verra ça plus tard... je ne sais pas faire nonplus
    Merci à vous
    Encore un grand merci à marot_r

  16. #16
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Non ce n'est pas irrémédiable,

    en faisant [Alt][F11] tu peux accéder au code puis tu peux lancer a la main "Unihide All".

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  17. #17
    Candidat au Club
    Inscrit en
    Juin 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Argument ou appel de procédure incorrect
    Bonjour,
    je suis novice dans access, j'ai réussi à écrire quelques requêtes pour avoir des tableaux de bord sous access et j'aimerais utiliser le code ci dessous pour protéger mes requêtes.
    les codes sont copiés dans un module mais lorsque j'execute j'ai le message :

    Erreur d'execution 5 :
    Argument ou appel de procédure incorrect

    je vous prie de m'aider à faire fonctionner ce code avec mon programme

    j'utilise access 2013
    Merci

  18. #18
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Sur quelle ligne d'instruction le message d'erreur ?
    Si Access ne te le dit pas, change la valeur de MODE_DEBUG pour =True et il devrait s'arrêter à l'endroit où le problème survient.

    Et note que ce code a été écrit pour Access 2007, il est possible qu'il ne marche pas pour 2013.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. [WD15] Requête Table et Etat
    Par webnaute dans le forum WinDev
    Réponses: 8
    Dernier message: 25/10/2012, 11h35
  2. [AC-2003] Masquer tables et requêtes au démarrage
    Par jeanpierre78 dans le forum IHM
    Réponses: 7
    Dernier message: 21/11/2011, 23h41
  3. Tout masquer (tables, formumaires, requêtes)
    Par jnmab dans le forum VBA Access
    Réponses: 6
    Dernier message: 07/01/2011, 09h03
  4. [AC-2007] Cherche liste des tables, requetes, etats, etc.
    Par cammir dans le forum Access
    Réponses: 3
    Dernier message: 03/08/2009, 17h02
  5. Réponses: 2
    Dernier message: 15/12/2008, 15h58

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