Access编程交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • 你的MDB+SQL連接表安..
  • 重新启用SHIFT安全键
  • 在Access Table..
  • Access数据库安全的几..
  • EXE修改安全级别并启动A..
  • 理解工作组信息文件在 Ac..

最新文章

  • Access提示“操作或事..
  • Access设置宏的安全等..
  • 在安全补丁Security..
  • 【技巧】如何让Access..
  • 以前流行的4种Access..
  • ACCESS使用链接表共享..

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > ACCESS数据库 > 安全/加密/解密
安全/加密/解密

在Access Table中存储密码的安全性



论 access Table 中存储密码的安全性 

    很多朋友在用 Access 编程一段时间后会发现随着本身的编程不断进步,已经能够熟练的使用 access 中的 Table Form Module 来处理数据了,但是进一步的却碰到了很多数据库外围的问题,比如说数据库引用的 DLL 文件、OCX 文件的声明、数据库调用外部文件时要如何用路径、为了避免别人破坏数据库而设定密码的等等问题。今天我就来贡献一点我自己的经验,是有关用户密码及权限的问题。

    首先,我们要顺带提一下的是 Access 本身的密码限制以及工作组等方式。(这里以 Access XP 环境作例子)Access 本身的密码限制就是指你在菜单 "工具->安全->设置数据库密码" 中所作的操作,这个密码可以限定打开你数据库的用户,但是一旦你的用户通过你给的密码打开你的数据库后这个密码就不起作用了,也就是说你不能限定某个用户有权打开 A 表却无权打开 B 表。那么更详细的限定用户操作的方法在哪里哪?身为 access 的高级用户的你会脱口而出“ MDW !”,对了,就是你在菜单 "工具->安全->用户与组权限" 中作的设定,默认情况下你所作的所有操作都保存到系统中的 System.mdw 文件中。

    前面说到 2 种 access 权限保护虽然说已经达到一般使用的要求,但是也许是由于 Microsoft 的漏洞,这两种方法都可以用第三方的破解软件成功破解,而且破解的过程非常非常之简单,甚至于电脑初级用户也能随意破解。一旦破解,你存储在表中的一些关键数据,比如说这个数据库用户的用户名、密码、权限设定都暴露了,如果你是使用 C/S 结构以 SQL 为后端的话 ODBC 链接字串暴露了那就更不得了了。破解者就可以用他得到他人账号在你完全无法察觉的情况下篡改或窃取你的数据了

    再说一下 access 中的 VBA 密码、VSS 保护以及编译成 MDE 文件的功能,还有加密整个数据库的功能。前三项功能其实都是用来保障你编写的程序的安全的,而后一项是保护你的数据库文件不被他人以二进制方式察看的,我就不再多说了。

    好了,对于像你这样的 access 高级用户来说,前面都是废话,非常感谢你耐着性子看完,下面才是关键。

    首先声明,我采用的密码保护方式主要是用来保护 ODBC 字串和数据库内用户名及用户密码的——不保护数据库中数据本身。 就如我以前几篇文章中提到过的,我是采用字符位偏移的方法来加密作为密码的字串的,基本思路是将某个密码字串中的每个字符读取出来,然后用 ASC() 函数得到它的内码,然后再偏移 n 位以得到一个新的字符内码,再用 CHR() 函数将其转换出来并组合好后存储到数据库中某个表的 STRING 字段中。基本代码如下:

'以下是登陆部分使用的代码
Dim LogUser As String
LogUser = Nz(姓名.Value)     '姓名是一个文本框,用以获取用户名
Dim tbl As DAO.Recordset
Dim strSQLcode As String
strSQLcode = "SELECT 职员表.ID, 职员表.姓名, 职员表.密码 FROM 职员表 WHERE " & _
    "(((职员表.姓名)='" & LogUser & "'));"
'职员表 中存储了密码及姓名
Set tbl = CurrentDb.OpenRecordset(strSQLcode, dbOpenDynaset, dbSeeChanges)
If tbl.EOF Or tbl.BOF Then
    MsgBox "没有找到该职员: " & LogUser & " 。"
    DoCmd.Quit
    Exit Sub
Else
    If tbl!密码 = CodeIn(Nz(密码.Value)) Then     'CodeIn函数就是做字符位偏移的函数
        MsgBox "登陆成功"
    End If
End If
'------------------------------------------------------------------------
'以下是更改密码部分使用的代码:
Private Sub CodeF()
On Error GoTo Err_命令3_Click
    If 新密码1.Value <> 新密码2.Value Then
        MsgBox "请确认新密码输入是否正确,二次输入的密码必须完全一致"
        Exit Sub
    End If
        
    Dim AUserChange As String
    AUserChange = Nz(姓名.Value)
    Dim tbl As DAO.Recordset
    Set tbl = CurrentDb.OpenRecordset("职员表", dbOpenDynaset)

    tbl.MoveLast
    tbl.FindFirst "姓名='" & AUserChange & "'"
    If tbl.NoMatch Then
        MsgBox "没有找到该职员: " & AUserChange & " 。"
    Else
        If tbl!密码 = CodeIn(密码.Value) Then         'CodeIn函数就是做字符位偏移的函数
            
            tbl.Edit
            tbl!密码 = CodeIn(新密码1.Value)
            tbl.Update
            MsgBox "密码变更成功,以后请使用新密码登陆"
            Set tbl = Nothing
            DoCmd.Close
            Exit Sub
            
        Else
            MsgBox "当前密码错误,请确认字母的大小写是否正确。"
        End If
    End If
    
Exit_命令3_Click:
    Exit Sub

Err_命令3_Click:
    MsgBox Err.Description
    Resume Exit_命令3_Click
    
End Sub
'------------------------------------------------------------------------
'以下密码输入位偏移过程
Public Function CodeIn(InputText As String) As String
' 由 VBA 代码注释器和错误处理程序外接程序插入的代码头
'=============================================================
' CodeIn
'-------------------------------------------------------------
' 参数
'-----------
' InputText (String)
'-------------------------------------------------------------
'=============================================================
' 代码头块结束
'以下为头变量:
    Dim i As Long
'错误处理代码开始
On Error GoTo Err_CodeIn

    For i = 1 To Len(InputText)
        CodeIn = CodeIn & Chr(Asc(Right(Left(InputText, i), 1)) + 1)
        Debug.Print CodeIn
    Next i

Exit_CodeIn:
    Exit Function
Err_CodeIn:
    MsgBox Err.Description
    Resume Exit_CodeIn
' 错误处理块结束。
End Function

    当然,我自己现在使用的加密过程更加繁复,我先要求用户输入一个“钥匙”字符串,然后根据钥匙 字符串中随机产生 Long 型变量作为位偏移的量,每一个被处理的字符位偏移范围可以从 -32768 到 65535 (每个字符偏移的具体量是不同的),并且把完成偏移后的字串根据 Long 型变量打乱成乱序,最后将偏移完成后的字串转换成二进制存储到 OLE 字段中,同时把 Long 型变量转换后也存储到数据库的特定地方。因有几家单位的 SQL 服务器链接字串使用我这种简单加密方式,所以不便把源代码放在这里,请大家原谅。但是所用到基本概念与我上述所讲的例子一样,大家可以考虑一下。

    最后再写出所用到的函数及模型:Asc/AscB/ChrB/Chr/CByte/CLng/Rnd/LeftB/RightB/Open/Get/GetChunk/AppendChunk/ADO模型

 

发布人:未知-office中国  
分享到:
点击次数:  更新时间:2005-02-05 12:25:25  【打印此页】  【关闭】
上一条:Access如何能通过窗体访问表,但不能直接读取表?  下一条:如何用VBA更改数据库密码



相关文章

  • • Access提示“操作或事件已被禁用模式阻止“解决办法
  • • Access设置宏的安全等级
  • • 在安全补丁Security Advisory 960715 更新之后 ACCESS或Visual B
  • • 【技巧】如何让Access更加安全
  • • 以前流行的4种Access数据库安全方式
  • • ACCESS使用链接表共享数据库的安全性案例探讨
  • • 自动降低安全级和选项卡设置示例
  • • 建立Access 数据库的安全门

热门文章

  • [2008-11-10] 建立Access数据库的安全门access数据库
  • [2003-12-20] Access安全性之QA详解access数据库
  • [2009-09-03] ACCESS使用链接表共享数据库的安全性案例探讨access数据库
  • [2006-08-25] ACCESS用代码如何压缩与修复带有安全机制工作组的后台文access数据库
  • [2008-11-20] 数据库的安全为什么要侧重于网络系统access数据库
  • [2009-08-15] Access中通过程序变更宏安全设置的方法access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

中山市天鸣科技发展有限公司 版权所有 1999-2023 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2025  www.metinfo.cn