ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2220|回复: 1

[转帖] access数据安全保障的三板斧

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-6-3 15:07 | 显示全部楼层 |阅读模式
每个人都会追求完美,在基本上满足了业务需求之后,大多数人都会想让数据变得更安全。数据的安全分为服务端和客户端2个部分。下面分别就使用Access和SQL Server作为后台数据库时的安全向大家分享一下我的经验。
Access作为后台数据时:
  Access作为后台数据库时,安全性是最弱的,因为它是文件型数据库,本身只是作为一个文件存放在服务器上的,所有处理都是通过客户端来进行的,而因为并发锁定的问题,需要具有写权限才能维护锁定文件(ldb或laccdb),因此所有用户都对其具有读写权限。这种情况下基本上所有用户只要知道了文件路径,都可以随意将数据库文件拷走。因此除了对数据库设置密码(这里强烈建议尽量使用新版本的Access,现在对于mdb格式的数据库,密码破解工具满天飞,设不设密码都一个样,而accdb格式的数据库密码现在还没有听说被谁破解),剩下我们唯一能做的,就是隐藏数据库的存放位置,不要让用户知道数据库放在哪里在。具体处理方法为:

  1.将数据库所在的共享文件夹的共享名后面加$符号,这样可以将共享文件夹在网上邻居中实现隐藏,也就是说打开网上邻居中就看不到共享文件夹了。
  2.创建链接表时使用UNC路径,而不要使用映射驱动器,使用映射驱动器的话,前面的隐藏就没有任何意义了。UNC路径以2个反斜杠开头,格式为\\servername\sharename,例如:\\192.168.1.1\罗斯文商贸系统后台数据库$\罗斯文商贸系统数据库.mdb
    注意,这里的servername参数可以是计算机名称,也可以是IP地址。

  对于客户端部分,主要是对于表的隐藏,当然这里不是说的在表名称上点右键,然后在属性中选择“隐藏”,这种方式只要是稍微熟悉Access操作的人都能破解。我们说的是用代码设置的隐藏,这种方式的隐藏/取消隐藏都只能通过代码来实现,即使将选项设置中的“显示系统对象”勾选仍然是看不到表的。具体实现方式为:
  新建一个窗体,在窗体中创建2个命令按钮,第1个按钮命名为btnHideTables,标题属性设为“隐藏所有表”,第2个按钮命名为btnUnhideTables,标题属性设为“取消隐藏所有表”。按钮对应的单击事件代码如下:

Private Sub btnHideTables_Click()
                Dim tdf As Object
            
                Const dbHiddenObject = 1

                For Each tdf In CurrentDb.TableDefs
                    tdf.Attributes = dbHiddenObject
                Next
            End Sub

Private Sub btnHideTables_Click()
                Dim tdf As Object

                For Each tdf In CurrentDb.TableDefs
                    tdf.Attributes = 0
                Next
            End Sub




















SQL Server作为后台数据库时:
  因为SQL Server本身就具有相应的安全机制,只要合理使用,就基本上没有什么问题。如果不能保证服务器只有特定人员才能使用时,建议将企业管理器的登录设为采用数据库账户认证,而不要使用Windows身份认证模式。
对于客户端部分,在创建文件DSN或者系统DSN的时候不要保存密码,当然也可以不使用任何DSN直接用代码来创建链接表,代码如下:
    Dim strConn As String
                strConn = "ODBC;DRIVER=SQL Server;SERVER=192.168.1.1;UID=你的用户名;PWD=你的密码;DATABASE=你的数据库名称"
                DoCmd.TransferDatabase acLink, "ODBC", strConn, acTable, "表1", "表1"




  在创建链接表的时候不要勾选“记住密码”选项,这样就算别人打开客户端看见了表,他不知道数据库登录密码就无法打开表看到其中的数据。但是这样的话每次登录时都会跳出一个SQL Server登录窗口,要求输入密码,对于这个问题我们可以在登录时先用代码打开一下数据库,这样ODBC连接池中就已经连上了数据库,然后任何对数据的访问都不会再跳出SQL Server登录窗口了。这里打开数据库是基于客户端程序进程的,因此当关闭客户端之后,ODBC连接池中的连接就会失效断开。打开数据库的代码一般放在登录按钮的单击事件过程中:

Private Sub btnLogin_Click()
                Dim strConn As String
               
                strConn = "ODBC;DRIVER=SQL Server;SERVER=192.168.1.1;UID=你的用户名;PWD=你的密码;DATABASE=你的数据库名称"
                Set dbs = DBEngine.OpenDatabase("", False, False, strConn)
                dbs.Close
                '其它登录处理代码
End Sub








  使用该方法时,当客户端登录之后,别人仍然可以通过创建到客户端的链接表来访问表中的数据,因此我们还需要结合前面讲到的隐藏表的方法一起使用,从而最大限度的保证数据安全。
  上面的方法都是基于对表的保护,但是对于查询就没有什么太好的办法了,只能尽量少用查询,比如窗体数据源的查询名称改为SQL语句。

TA的精华主题

TA的得分主题

发表于 2017-3-20 12:37 | 显示全部楼层
非常感谢老师的帖子,学生从中学到了非常有用的只是。
但还想求教老师:在access中,我还需要用代码真正隐藏查询、窗体、报表、宏、模块,因此还请老师指教代码,谢谢!


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-28 05:31 , Processed in 0.038818 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表