这两天为刚编写好的数据库安全问题而烦恼,打算用工作组来加强安全,由于access里面、创建工作组时候和微软的安全性KB里面都没有明显的提示或警告,很容易给业余人员误导一种设置了工作组就万事无忧的错觉。在我实际测试时却发现,普通用户打开access主程序,用她的工作组账号登陆后,新建一个数据库,就能导走原来数据库上面的表上的所有数据!
翻了不少旧帖和得到各位高手朋友的热心指点,总结归纳了一下主要预防方法有1.利用自编的函数对字段和数据表进行加密 2.分离前后台数据库等方法,但个人觉得这些方法一来比较复杂麻烦,让我这类门外汉望而却步,二来还是未能彻底解决MDW文件暴露的问题,突然想到一个应该可以通过NTFS文件权限的简便方法隐藏和保护MDW就能达到目的,不需要高超的编程加密和数据库技巧,在此献丑了,如有错漏请各位别见笑:
下面是工作组或域的网络环境详细设置步骤(单机环境不用说了):
一、在放置数据库的服务器上的NTFS分区建立一个文件夹,如"MyDB",再建立一个普通win用户(如"user")并为这个用户设置一个14位以上的高强度密码。在MyDB的文件夹的ntfs安全选项列表里,只设置user用户对该文件夹的完全控制权限,将所有其他的权限全部删除;并将MyDB以MyDB$的隐藏共享方式共享出来
二、将要共享出来的数据库文件(MDB或MDE),所有窗口设置为弹出和模式,取消快捷菜单和所有快捷键,在工具-安全菜单里面设置数据库密码,然后运行安全机制向导加密数据库,稳妥地设置好工作组安全性和权限,然后将MDB、MDW文件都放置在MyDB中
三、在客户端建立一个同样名字和密码的普通win用户user,使用一个类似win的计划任务可以以其他用户身份运行程序的第三方工具软件,生成一个经过加密的包括了access启动所需的MDB、MDW路径、数据库密码等参数的任务文件,客户端用户A使用他们自己的windows帐号A,双击这个任务文件后,就会自动以windows帐号user身份,以命令行方式启动access自动打开只有user才能访问数据库和MDW文件。
客户端不用第三方工具的话,在win2000和xp pro中也能实现,譬如说用user在D盘建立一个run的文件夹,里面就放一个BAT文件,内容大致是启动access的命令行如C:\Program Files\Microsoft Office\Office\MSACCESS.EXE "\\Server\MyDB$\XXXX.mdb" /WRKGRP "\\Server\MyDB$\Secured.mdw" /PWD *******,然后用win2000和xp自带的EFS加密这个run文件夹和bat文件,建立一个计划任务,设置双击时用user身份执行这个bat就可以了!
使用这个方法:
1、最大的好处就是同时保护mdb和mdw,解决mdb和mdw直接暴露问题!不知道user的密码根本无法与数据库连接,在攻破windwos的NTFS文件系统访问限制前,任何针对数据库的破解工具都派不上用场!
因为操作员无法知道躲藏在加密任务文件中的MDB、MDW路径和数据库密码,即使知道,以他们的windows帐号也不能打开文件夹,不能copy走数据库文件和MDW。
上面的每个步骤都很重要!如果设置了高强度的数据库密码后再运行安全向导加密,因为平时是access自动输入数据库密码登陆的,他们光知道自己工作组密码而没有数据库密码,即使mdb和mdw被copy走他们也没办法!
2、取消所有快捷键和快捷菜单、设置了弹出和模式,是为了防止用户以user的身份用CTRL+N等方法再开数据库窗口突破限制,如果你的数据库有导出excel功能设置,不能用弹出窗口的方式询问路径和文件名了,因为那个窗口是以user用户运行的。
3、如果在加密的任务文件命令行中直接加入工作组帐号和密码来自动登陆的话,shift键永远失效了!因为不是当前win用户直接启动access;也不需担心客户端的access主程序被修改从而被截获数据库路径、数据库密码,因为这些第三方软件都有数字签名验证功能。
4、如果需要更高的安全要求,还可以和windows的安全性进一步结合:如设置user帐号密码重试次数、锁定时间、访问和登陆审核日志来避免暴力破解;在服务器和客户端间设置ipsec来防止网络嗅探器;在服务器以user身份使用加密文件系统EFS加密MyDB文件夹,即使服务器操作系统受到漏洞攻击被获取管理员组甚至是系统权限,人家还是拿你的mdb和mdw没办法,除非他能弄到user的密码,可惜这个用户平时根本不使用!
[此贴子已经被作者于2006-12-24 17:24:50编辑过]
|