设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

1234下一页
返回列表 发新帖
查看: 18124|回复: 37
打印 上一主题 下一主题

[加解密/安全] 【Access安全】Access数据安全保障的三板斧

[复制链接]
跳转到指定楼层
1#
发表于 2012-6-18 11:51:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 红尘如烟 于 2012-6-18 17:36 编辑

  现在一直忙工作,很长时间都没上过论坛了,冒个泡。朋友们都在的哇?

  每个人都会追求完美,在基本上满足了业务需求之后,大多数人都会想让数据变得更安全。数据的安全分为服务端和客户端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语句。



评分

参与人数 1经验 +10 收起 理由
todaynew + 10 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏18 分享分享 分享淘帖 订阅订阅
2#
发表于 2012-6-18 12:30:36 | 只看该作者
斧子不错!!!!!!!!!!!!!!!!!
3#
发表于 2012-6-18 13:07:12 | 只看该作者
谢谢分享!
4#
发表于 2012-6-18 16:09:25 | 只看该作者
谢谢分享~~~~~~~~···
5#
发表于 2012-6-18 16:46:58 | 只看该作者
谢谢分享!

点击这里给我发消息

6#
发表于 2012-6-18 17:16:51 | 只看该作者
学习!红尘现在是大忙人了。。。
7#
发表于 2012-6-18 21:19:08 | 只看该作者
顶啊 啊啊
8#
发表于 2012-6-18 23:11:54 | 只看该作者
谢谢, 受益匪浅
9#
发表于 2012-6-19 01:16:12 | 只看该作者
学习。
10#
发表于 2012-6-19 01:16:44 | 只看该作者
学习,收藏了,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 07:20 , Processed in 0.108253 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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