Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> 安全  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1702323
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

设置只有管理员才能改变AllowBypassKey属性

作者:未详  摘自:未详  :cg1  更新日期:2003-12-22  浏览人次:

 

设置只有管理员才能改变AllowBypassKey属性

转贴自:Access中国( http://www.access-cn.com
 )
文章录入:tmtony
 
tmtony翻译:

在ACCESS的帮助文件中说明CreateProperty 方法的语法:

Set property = object.CreateProperty (name, type, value, DDL)
其实最后一个参数是这个解释的(部分描述):

DDL 可选. 一个变量(逻辑子类型) 指定这个属性是否为DDL对象. 缺少值为False. 如果设置为TRUE,除非他有 dbSecWriteDef 权限,用户就不能改变或删除这个属性
CreateProperty 是用来创建或设置 AllowBypassKey 属性如果这个属性设为TRUE, 那就可以禁用户近SHIFT键来禁止启动属性和AutoExec 宏. 然而,ACCESS帮助中提供的例子没有使用第四个 DDL 参数. 这意味着任何人都可以打开数据据然后用程序复位AllowBypassKey 属性.

所以,为了限制普通用户去改变这个属性,所以我们设置第四个参数为TRUE 。

为了对比,我们也同时列出了ACCESS本身的例子以便参照


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


 
 


原文地址:http://www.hammerdata.com/Newsgrp/general/gen0040.htm

原文如下:
General: Securing AllowBypassKey
 Author(s) 
Michael Kaplan 
 
 
The Access help file documents the CreateProperty method as

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

where the last argument is documented as

Part Description 
DDL Optional. A Variant (Boolean subtype) that indicates whether or not the Property is a DDL object. The default is False. If DDL is True, users can't change or delete this Property object unless they have dbSecWriteDef permission. 

The CreateProperty method is used to create or set the AllowBypassKey property to true, which prevents a user from bypassing the startup properties and the AutoExec macro.  However, the sample code provided in the help files does not use the fourth DDL argument when making a call to CreateProperty. This means that anyone who can open the database can programmatically reset the AllowBypassKey value.

Therefore, in order to restrict the change capabilities to only the Admins, set the fourth argument to True when calling CreateProperty. And don't lock yourself out!

As a sample, here's how the CreateProperty method should be called in order to properly utilize the DDL argument. The current sample in Access Help Files is also listed below to help illustrate the differences.

' *********** Code Start ***********
'This code was originally written by Michael Kaplan.
'It is not to be altered or distributed,
'except as part of an application.
'You are free to use it in any application,
'provided the copyright notice is left unchanged.
'
'Code Courtesy of
'Michael Kaplan
'
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 ***********
 



 

 
相关文章
     没有手动相关文章
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利