Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何禁用按shift键打开数据库文件(以能够调出数据库窗口)?

刘小建  发表于:2013-04-04 11:00:58  
复制

1.在Access数据库(MDB)中禁止Shift键的方法
首先创建一个设置数据库属性的通用函数。
Function ChangeProperty(strPropName As String, varPropType As Variant, varPropvalue As Variant) As Integer
Dim dbs As Object, prp As Variant
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 ' 如果错误是数据库没有这个属性
Set prp = dbs.CreateProperty(strPropName, _
varPropType, varPropvalue) ' 创建新的属性,并设置它的默认值
dbs.Properties.Append prp ' 将新的属性对象绑定到数据库
Resume Next ' 继续执行后面的代码
Else
ChangeProperty = False ' 如果是其它错误,则函数值返回假
Resume Change_Bye ' 转到函数退出处理
End If
End Function
然后调用这个通用函数来设置“AllowBypassKey”属性值为False,代码如下。
ChangeProperty "AllowBypassKey", 1, False 'False为禁止Shift键,True为恢复
如果想允许使用Shift键,则同样设置ChangeProperty "AllowBypassKey", 1, True就可以了。

我的问题是:如何调用这个函数呢?这个函数应该在最早的时候执行,才能屏蔽shift键,那该如何调用呢?
谢谢指教!

 

Top
在水一方 发表于:2013-04-04 16:10:40

利用 宏 autoexec 




刘小建 发表于:2013-04-04 21:37:08

请问:我执行了autoexec,可是出来这个信息,宏的执行中断了。而且,也没能禁止shift键,因为我按住shift,就出来数据库窗口,而不出上面错误信息,似乎shift的作用是在autoexec之前的。是不是这样呢?



刘小建 发表于:2013-04-04 22:34:49

我现在误打误撞学会了修改allowbypasskey属性了!就是在立即窗口里运行一下上面那个函数。

现在,我得照作者说的,补上最后一个漏洞,可是不理解,不会弄。

所谓“道高一尺,魔高一丈”,其实上面的方法还不能保证绝对的安全,通过在另一个数据库文件中运行代码来打开这个数据库并设置“AllowBypassKey”属性为真,就能破解Shift键。代码如下。
Public Function EnablePassKey(ByVal strFileName As String) As Boolean
On Error Resume Next
Dim accApp As Object ‘存储Application对象
Set accApp = CreateObject("Access.Application") ‘创建一个新的Access的Application
accApp.OpenCurrentDatabase strFileName ‘使用新的Application打开要设置的文件
accApp.CurrentProject.Properties.Add "AllowByPassKey", True ‘将AllowByPassKey属性值设置为真
accApp.Quit ‘关闭新的Application
If Err.Number = 0 Then EnablePassKey = True
End Function
其中参数StrFileName表示需要设置的Mdb或Adp文件的完整路径。
不过,对付上面的破解,也可以设置只有管理员才能改变这个属性,从而从根本上禁止普通用户通过其他途径来设置这个属性,方法是在通过CreateProperty (name, type, value, DDL)创建属性时,设置第4个参数DDL为True就可以了。

这个createproperty你知道是怎么回事吗?谢谢指教了!

分享至
更多


总记录:3篇  页次:1/1 9 1 :