Carte du site
 Remerciements
 Netiquette
 Bugs
 Tables
 Requêtes
 Formulaires
 États (rapports)
 Modules
 APIs
 Chaînes
 Date/Time
 Général
 Ressources
 Téléchargeables

 Termes d'usage

General: Sécurité du AllowBypassKey

Author(s)
Michael Kaplan

Sécurité du AllowBypassKey

Home
Home

--- Soumis par Michael Kaplan ---

Sécurité du AllowBypassKey

Le fichier d'assistance d'Access documente la méthode CreateProperty:

Set property = object.CreateProperty (name, type, value, DDL)

où le dernier argument est documenté comme suit:

Part Description
DDL Optionnel. Un Variant (sous-type booléen) qui indique si la propriété est un objet DLL. Le défaut est False. Si DDL est True, les utilisateurs ne peuvent changer ou effacer cette propriété à moins qu'ils ne possèdent la permission dbSecWriteDef.

La méthode CreateProperty est utilisée pour créer ou initialiser la propriété  AllowBypassKey à Vrai, ce qui empêche l'utilisateur de court-circuiter l'auto démarrage (macro Autoexec).  Malheureusement, le code fourni dans le fichier d'aide n'utilise pas le quatrième argument DDL lors de la création de la propriété, ce qui signifie que n'importe qui, qui peut ouvrir la base de données, peut également modifier la propriété AllowBypassKey.

Donc, afin de réserver la possibilité de modifier cette propriété aux seuls administrateurs, n'oubliez pas d'assigner cette propriété à  True lors de sa création... mais ne restez pas pris à l'extérieur de votre base de données!

Comme exemple, vous trouvez ci-dessous un d'utilisation de la méthode CreateProperty, tel qu'il devrait être, de façon à initialiser l'argument DDL. Le code actuel du ficher d'aide est également reproduit pour vous aider à comparer les différences.

' *********** Code Start ***********
Function ChangePropertyDdl(stPropName As String, _
 PropType As DAO.DataTypeEnum, vPropVal As Variant) _
 As Boolean
 ' Uses the DDL argument to create a property
 ' that only Admins can change.
 '
 ' Current CreateProperty listing in Access help
 ' is flawed in that anyone who can open the db
 ' can reset properties, such as AllowBypassKey
 '
    On Error GoTo ChangePropertyDdl_Err

    Dim db As DAO.Database
    Dim prp As DAO.Property

    Const conPropNotFoundError = 3270

    Set db = CurrentDb
    ' Assuming the current property was created without
    ' using the DDL argument. Delete it so we can
    ' recreate it properly
    db.Properties.Delete stPropName
    Set prp = db.CreateProperty(stPropName, _
     PropType, vPropVal, True)
    db.Properties.Append prp

    ' If we made it this far, it worked!
    ChangePropertyDdl = True

ChangePropertyDdl_Exit:
    Set prp = Nothing
    Set db = Nothing
    Exit Function

ChangePropertyDdl_Err:
    If Err.Number = conPropNotFoundError Then
        ' We can ignore when the prop does not exist
        Resume Next
    End If
    Resume ChangePropertyDdl_Exit
End Function

Function ChangeProperty(strPropName As String, _
 varPropType As Variant, varPropValue As Variant) As Integer
' The current listing in Access help file which will
' let anyone who can open the db delete/reset any
' property created by using this function, since
' the call to CraeteProperty doesn't use the DDL
' argument
'
 Dim dbs As Database, prp As Property
 Const conPropNotFoundError = 3270

 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
' *********** Code End ***********

 

© 1998-2001, Dev Ashish, All rights reserved. Optimized for Microsoft Internet Explorer