Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > 程序人生

【access小品】打群架--数据表的潜伏

时 间:2011-01-14 11:20:50
作 者:todaynew   ID:10802  城市:武汉
摘 要:数据表的潜伏
正 文:

  昨天为了潜伏技术,新版友roych与老版友十段打起来,为了打得更精彩更热闹,老汉扇了把火,添了把柴,导致若干版友参与了这次群架。为了客观的反映这次争斗,现将主要过程反映如下:

原帖地址:http://www.access-cn.com/thread-95999-1-1.html

事后邀请了红尘如烟参与群殴【也谈access的安全性问题——关于roych和十段隐藏表问题的讨论

--------------------------------------------------------

一、roych同志挑起纠纷的文章:
  (⊙_⊙),小生闲来无聊,逛了下EH,结果发现有帖子提到某个隐藏表插件很好,想来也是几年前的技术了吧?无外乎就是把表更改名称,把修改表名称(加前缀Usys)当成系统对象,或者修改为临时表(加前缀~TMPCLP)来隐藏罢了。
  当时便回帖说这没什么神秘的,楼主坚持认为他的隐藏方式更好,详见:
  http://club.excelhome.net/thread-672456-1-1.html
  俺最喜欢拍砖了,为此还做了个取消隐藏的实例,并让他上传附件,想一试为快。
  按他的头像来看,等了半天,居然没有传附件上来。这次,Roy就纳闷了,莫非还有用系统函数MSysObjects找不到的表(前提当然是能进入前台设计模式了)?还是故弄玄虚?
       俺先做一个实例,欢迎大家一起讨论(有兴趣讨论的才能看~~)。
实例地址:http://www.access-cn.com/forum-attachment-aid-NDQ2Mzh8OTYzMjMxNjB8MTI5NDk3NDA1NnwxNDQ0MzY%3D.html

注:该同志用语根据要求做过修改。
------------------------------------

二、老汉的几点声明
把数据放到其他系统中,然后用代码读进来(不用链接),MsysObjects应该看不及这个表吧?
呵呵,你在和十段同志拍砖呀。
支持拍砖,但希望相互尊重,以解决问题为目的。

1、关于对本帖支持的说明:
  一个问题的解决一定有多种方法和途径,争论和探讨问题是找到多种途径和方法的有效手段。不过希望参与问题讨论的所有同志,以相互尊重为前提,语言和文字上要有谦谦君子的风范。不要撸胳膊挽袖子,不要讥讽和嘲笑。可争胜负,可较短长,可开玩笑,但不可斗气。
首先对楼主用语提出批评,请自行修正文字。

2、交战双方人物介绍:
roych同志:2009年底加盟本论坛,在版面比较活跃。学习Access时间一年左右,进步较快,悟性较高。在钻研学习的同时,也能参与解答版友的问题。从该同志的表现来看,属于潜力股,版面的未来之星。

十段同志:该同志为骨灰级版友,2005年起开始对Access进行学习研究,现在为多个网站论坛的版主。在Access的开发、培训方面有丰富的经验,也经常在版面为版友们写出很多很好的实例。该同志属于蓝筹股,盘子比较大,对指数波动有重大影响。

3、对所提问题的看法:
roych同志与十段同志争论的问题,属于潜伏的问题,这个问题版面经常有版友提到。从目前两个人提出的潜伏技术来看,roych同志提出的是易容术潜伏法,十段同志提出的是透明人潜伏法。本人在2楼提出的是小隐于林潜伏法。是否有更多的潜伏法,不得而知,每种潜伏法又能分为多少技术手段也不得而知。希望喜欢潜伏的同志们参与讨论,揭示多种潜伏技术。

------------------------------------

三、十段同志的应战主要发言:

想不到一个技术性问题会受到楼上各位的关注,不过对Access的学习,我还只不过是学到一些皮毛,让各位见笑了。

谢谢关注,让大家见笑了,现附上拙例,请大家雅正。
实例地址:http://www.access-cn.com/forum-attachment-aid-NDQ2NDB8OGM1YTU5OWN8MTI5NDk3NDA1NnwxNDQ0MzY%3D.html

-------------------------------------

四、roych同志继续反驳:
用DAO总能找得到表名称吧?应该是加载项里设置了属性,下班后回去看看那几个函数~~
实例地址:http://www.access-cn.com/forum-attachment-aid-NDQ2NDR8Y2NiMmY3OGV8MTI5NDk3NDA1NnwxNDQ0MzY%3D.html

-----------------------------------------------------------------------
五、十段同志的继续论辩:
实现的方法肯定是有多种,但我用的都不是你所述的那些方法,真心希望你通过研究也能取得收获,不过我那个插件对链接表也同样起到隐藏效果,请看下面的动态效果:
实例地址:http://www.access-cn.com/forum-attachment-aid-NDQ2NDZ8YTZmZTJhNWF8MTI5NDk3NDMxMHwxNDQ0MzY%3D.html

----------------------------------------------------------------------
六、chaosheng 同志的观点:
说到表隐藏,我想起acccess2010的设置数据库密码. 2010设了密码的数据库好像无法破解了吧. 
不知以下的方式可行否?
数据放在设了密码的accdb文件中,窗体报表VBA放在另一个accde文件中而用dao访问前者的数据.
但我看了帮助说设了密码的accdb不支持行锁定,有点遗憾啊.

-----------------------------------------------------------------------
七、t小宝同志的观点:
对于隐藏表,通过在DAO中设置TableDef对象的Attributes属性为0或1,可以显示或隐藏,该属性不能用手工设置,必须通过编程实现。
十段老师9楼的例子可能就是用的这种方法。roych 在10楼也是用的这种方法。
但是不管什么样,系统表MSysObjects中还是有所有的表的信息的,不过可以把这个表也隐藏起来。
那么用上面方法把所有表隐藏后,如果不懂DAO编程或不想用编程手段,还能看到所有的表名和表中的数据吗?
答案是可以!方法如下:
在库中新建一查询,在SQL视图中输入:Select * From MSysObjects ,然后打开数据表视图,在Name列有各种对象的名称,Type列为对象类型(1为表),这样就得到表名了,比如有表:“产品”,然后如法炮制,新建查询,在SQL视图输入 Select * From 产品 ,即可看到产品表的所有记录。

----------------------------------------------------------------------

八、十段同志进一步的阐述:
其实隐藏的本意,是不想让人轻易复制数据,事实上用todayenw所述的方法比较实用。

-----------------------------------------------------------------------
九、老汉的阶段性总结:
目前的进展有点意思了,呵呵。总结一下:

1、十段同志以很大度谦虚的姿态应对挑战,并积极做答,反映了骨灰级版友的风采。由此继续批评roych 同志,没有对文字中稍有过分的语言进行修正。不过对roych 的穷追不舍的精神继续赞赏。在我看来,十段与roych 讨论问题的基点可能已经不同,正是这种不同才有利于从思维的岔路上找到更多的东西。

2、t小宝版主也许说的比较全面,不过我对此问题没有研究,不能过多评价。十段同志说我的方法可能是比较彻底的方案,不过我说的是从红尘那里剽窃来的,至于红尘从何处偷来的,就不得而知了,呵呵。这样看来,学习都是相互借鉴的一个过程,这个过程中可能有虚心求教,也可能暗自瞟学,现在又出现了一种争执辩论。怎么说都是一件好事。

3、总的说来,就此问题探讨的氛围还是和谐的。我想只要是针对问题不针对人,探讨可以再尖锐一些,激烈一些。在此对红尘同志提出一个批评,对chaosheng 同志提出一个表扬,因为二人的态度不同。也请其他对该问题有兴趣的版友,发表意见和看法,这个时候已经没有了版主,不讲了规矩,按照江湖乱套的方法行事即可。

--------------------------------------------------------------------
十、roych同志的进一步阐述:
这次把实例修改后,在取消表的隐藏属性后再取消启动属性,就好了。这是按9L的例子修改后的:
实例地址:http://www.access-cn.com/forum-attachment-aid-NDQ2NTR8YmQ0YTEzMDh8MTI5NDk3NDYzNXwxNDQ0MzY%3D.html

这是按链接表的形式做的,方法其实都一样,对应的是12L的实例。
实例地址:http://www.access-cn.com/forum-attachment-aid-NDQ2NTV8MjUwODMzZTV8MTI5NDk3NDYzNXwxNDQ0MzY%3D.html

回复13L LJB,这个不是MDE文件。只是禁用了某些属性。如果想隐藏表,把我的实例换个方向来思考,大体是可以隐藏的,前面也说了,在表名称加前缀,或者把表的Attributes属性设置为真就可以了。

说句题外话,学这个时间还不是很长,我在日记里也写了:http://www.access-cn.com/home-space-uid-179386-do-blog-id-14842.html
在跟师傅学习的日子里,——可惜太短了,只有一个月左右的时间,——他把软件交付给我时说过,一切程序都没有万无一失的安全,我们能做的只是提高破解的成本而已。一般来说谨防两种人就够了,一种是菜鸟,另一种是高手。这两种人搞破坏的区别只是在于无意和有意而已。

我的妈呀,刚刚还在研究代码,这就给批评了……不行,俺得去修改一些言辞,不能丢了老家的脸。。。
老哥哥,先别急着总结啊。俺不能轻易认输~~
1、当然,如果需要更严谨点就需要把这三种情况的代码进行重组了。
2、此外,由于对错误代码不太熟悉,所以没有进行错误处理。
3、本来打算用copyobject方式来做,不过有些东西没调试好,结果……(见第一段,O(∩_∩)O~)
4、最后一点,欢迎大家一起来拍。
--------------------------------------------------------------------

十一、老汉进入战斗

  帮十段同志驳斥一下roych、t小宝和andymark 的看法,呵呵。

  先奠定一下驳斥的公理与假设。要奠定驳斥的公理与假设,先要说道说道公理与假设。建立一套理论、说明一个问题、阐述以个观点、告诉一件事情,都是有公理、有假设、有语境的。这种公理、假设、语境可能是显见的也可能是隐形的。显见的说者与听众没有什么太大的障碍,即使有障碍是非的判定也是有充分标准的。隐形的就比较麻烦了,说者与听众就可能产生理解上的不同。大多数情况下,公理、假设、语境是隐形的,否则的话语言和文字就非常的罗嗦,就像我现在这样,必须在得出结论之前,做若干公理、假设、语境的铺垫。

  我不是十段同志,不可能知道他在论述问题时候真实的公理、假设、语境是什么。不过这不要紧,我们可以从常理来推导他的公理、假设、语境是什么。先做一个正向的推论,我们从目的开始回推。隐藏表的目的是什么?最主要的目的是为了避免菜鸟由于误操作删除了数据表、查询、窗体等对象。基于这个目的,越不容易得到表名,并且(注意这个并且)可用右键、快捷键、工具栏工具、菜单栏命令进行删除的隐藏技术越是高明。由此可以看出这里说的隐藏其实不是表名、也不是数据,而是尽可能的屏蔽掉对对象的删除操作,这应该是十段同志示例合理的公理、假设和语境。反向推论一下,假设我们说十段同志的公理、假设、语境就是文件名,我们甚至进一步扩大到记录层面的话,那就出现了一个不可调和的矛盾,隐藏的结果是我们看不见了对象也看不见了他的子集,这就与数据库要完成的任务背道而驰了。

  这么一说就大体清晰了,这里存在两个假设,其一是隐藏是相对于菜鸟而言的,我们假设了他们不会用VB进行对象的删除操作;其二是我们隐藏的不是文件名和记录,隐藏的是对文件的非代码删除操作。用这个公理、假设和语境来看看roych、t小宝和andymark三同志的观点,就不难发现他们的结论是有问题的了。

  说这么一大段的意思,其实不是要真的反驳谁,也不是真的要为谁辩护。我想说明的一个问题是,看来是Access的问题,其实不一定是Access的问题,看来需要从Access技术手段上论证的问题,其实不需要从Access技术手段上论证。就十段同志与roych争论的问题来看,分歧实际上不是技术问题,是公理、假设、语境不一致的问题。这种争论只要达不成公理、假设、语境上的一致,就永远区别不了是非,判定不了胜负。唯一能实现的,就是找到不同公理、假设、语境下,实现隐藏的Access技术,仅此而已。

----------------------------------------------------

十二、roych继续阐述:
      不管您是不是武汉人,俺也得说两句了~~
       不妨说下从师傅那里学到的一些关于安全方面的东西,就拿我目前维护的这个数据库来说吧。为了防止用户直接接触到数据表,我们做了这些东西:
       1、删除系统自带的工作组文件,自定义一个带密码的用户组。为了隐藏这个工作组,引进了江羽版主的VB封装思想,把文件改为dll格式。
       2、链接后台数据库,设置后台数据库的相应密码。设置后台数据库的读写权限,禁止用户删除后台数据。
       3、屏蔽shift键和设计模式。设置登录窗体,在登录窗体上用shell函数来前台。
       不能说这个就是无懈可击的安全防范,在未得知后台数据库所在的文件夹之前,用户想要破解或者破坏后台数据库并非易事。很显然,您是不可能直接用破解工具来破解的,因为您不知道哪个才是真正的工作组文件,相信没有哪个高手会逐个去把dll文件改成mdw文件来调试吧?
       如果出于安全的考虑,隐藏表到底有没有用?到底有多大用处?我觉得这是我们需要考虑的。



Access软件网QQ交流群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助