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

【access安全】access数据安全保障的三板斧

时 间:2012-06-18 10:14:17
作 者:红尘如烟   ID:10768  城市:成都
摘 要:  每个人都会追求完美,在基本上满足了业务需求之后,大多数人都会想让数据变得更安全。数据的安全分为服务端和客户端2个部分。下面分别就使用Access和SQL Server作为后台数据库时的安全向大家分享一下我的经验。
 
 
 

正 文:

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

 



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

常见问答:

技术分类:

相关资源:

专栏作家

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