收藏 分销(赏)

ACCESS安全.doc

上传人:仙人****88 文档编号:9232702 上传时间:2025-03-18 格式:DOC 页数:17 大小:64KB 下载积分:10 金币
下载 相关 举报
ACCESS安全.doc_第1页
第1页 / 共17页
ACCESS安全.doc_第2页
第2页 / 共17页


点击查看更多>>
资源描述
第10章   安  全 处理加了密码的MDB数据库文件 当 MDB 文件加了密码,直接由 Access 打印MDB文件时,会出现密码对话框,询问密码。但是若要由 VB或BA程序中打印,必須更改B和VBA序中打开MDB文件的指令,否则会出现错误信息!以下针对各种情况,分別加以说明:   1、 使用 DAO 命令打开MDB文件: OpenDatabase   若要由程序中打开,命令如下: Set DB = OpenDatabase(DatabaseName, False, False, ";Pwd=密码") 实例: Dim db As Database Set db = OpenDatabase("C:\db1.mdb", False, False, ";Pwd=1") 若要使用 Data 控件,设定方法如下: 1、设定 DatabaseName 属性 (MDB文件名称 / 含路径) 2、设定 Connect 属性,將预设的字串 "Access" 改成 ";Pwd=密码" (不含双引号) 3、设定 RecordSource 属性    2、使用 ADO 命令打开MDB文件:   在使用 ADODC 或 DataEnvironment 设定好之后,直接利用属性窗口修改 ConnectionString 属性(附属于 ADODC) 或 ConnectionSource 属性(附属于 DataEnvironment 的 Connection 控件),修改的方法是在属性之后增加以下参数: ;Jet OLEDB:Database Password=密码 除了 ADODC 及 DataEnvironment 之外, 直接使用 ADO 控件來打开含有密码的 mdb MDB文件,设定参数的方法也是相同的。   3、压缩加了密码的MDB文件:CompactDatabase   DBEngine.CompactDataBase "原MDB文件", "新MDB文件", , , ";pwd=密码" 实例例如: DBEngine.CompactDatabase "C:\Db1.mdb", "C:\Db2.mdb", , , ";pwd=1"    4、复加了密码的MDB文件: RepairDatabase   不必理会MDB文件设定的密码! DBEngine.RepairDataBase "MDB文件" 实例例如: DBEngine.RepairDataBase "C:\Db1.mdb"    以下给出一个函数可以使用DAO打开带密码保护的MDB数据库文件: Public Function OpenPasswordProtectedDatabase(DBPath As String, _     Password As String) As Object     On Error Resume Next     Dim db As DAO.Database     Set db = DAO.OpenDatabase(DBPath, False, False, _         ";pwd=" & Password)       If Err.Number = 0 Then         Set OpenPasswordProtectedDatabase = db     Else         Set OpenPasswordProtectedDatabase = Nothing     End If   End Function 其中参数DBPath为数据库文件的有效路径名称;参数Password为密码。 该函数需要引用DAO数据库才有效。  如何调出工作组对话框 调出“用户与组帐号”对话框:DoCmd.DoMenuItem acFORMBar, 6, 5, 2, acMenuVer70 调出“用户与组权限”对话框:DoCmd.DoMenuItem acFORMBar, 6, 5, 1, acMenuVer70  以上语句在office2000里测试通过 试用版限制时间与日期的方法 可用注册表简单地保存已用的天数或次数 ' 次数限制(如30次): Private Sub Form_Load()  Dim a As Long  Dim b As Long  b = GetSetting("MyApp", "set", "times", 51345)  a = b Xor 51345   If a < 30 Then  MsgBox "现在剩下:" & 30 - a & "试用次数,好好珍惜!"  a = a + 1  b = b Xor 51345  SaveSetting "MyApp", "set", "times", b  Else  MsgBox "试用次数已满,请联系gfuuyygy!"   End If End Sub '时间限制的(如10天)  Private Sub Form_Load()  Dim a As Long  a = GetSetting("MyApp", "set", "day", 0)  If a = 10 Then  MsgBox "试用期已过,请联系gfuuyygy!"  Else MsgBox "现在剩下:" & 10 - a & "试用天数,好好珍惜!"    if day(now)-a>0 then  a = RemainDay + 1  SaveSetting "MyApp", "set", "times", a  End if End if  End Sub 在 Windows 注册表中 或 (Macintosh中)应用程序初始化文件中的信息保存或建立应用程序项目。 语法 SaveSetting appname, section, key, setting SaveSetting 语句的语法具有下列命名参数: appname 必要。字符串表达式,包含应用程序或工程的名称,对这些应用程序或工程使用设置 在Macintosh中,这是System文件夹中Preferences文件夹中初始化文件的文件名。 section 必要。字符串表达式,包含区域名称,在该区域保存注册表项设置。 key 必要。字符串表达式,包含将要保存的注册表项设置的名称。 setting 必要。表达式,包含 key 的设置值。 说明 如果无论如何也不能保存注册表项设置,则将导致错误发生。 示例 首先使用 SaveSetting 语句来建立Windows注册区(或 16位 Windows 平台的.ini档)里 appname 应用程序的项目,然后使用 GetSetting 函数来得到其中一项设置并显示出来。因为有传入参数 default,GetSetting 函数一定会有返回值。请注意,section 名称不能用 GetSetting 函数取得。最后,使用 DeleteSetting 语句将该应用程序项删除。 ' 用来保存 GetSetting 函数所返回之二维数组数据的变量。 Dim MySettings As Variant ' 在注册区中添加项目。 SaveSetting "MyApp","Startup", "Top", 75 SaveSetting "MyApp","Startup", "Left", 50 Debug.Print GetSetting(appname := "MyApp", section := "Startup", key := "Left", default := "25") DeleteSetting "MyApp", "Startup" 显示信息文件中的用户身份 =CurrentUser() 如何不通过设置工程密码锁定VBA代码? 1、打开二进制编辑软件,我用的是UltraEdit 2、在二进制编辑软件里打开你要加密的mdb文件 3、按CTRL+F调出查找对话框 4、在查找对话框里输入要查找的字符串:ID="{ 5、在"查找ASCII"前打勾,然后按“查找下一个” 6、找到后更改ID="{后的一个字符为其它字符,并记住该字符在改之前的值(因为解锁的时候要改回来。 7、保存更 现在打开你的mdb文件并查看VBA代码 Open "D:\VB6_T ' 打开被密码保护的数据库  Open "D:\VB6_Test\MDB_Password\Pass_Protected_DB.mdb" For Binary As #2  Seek # Seek #2, Offset  Get #1, , bEmpty ' 其中每位密码占两个字节  Get #2, , bPass ' 一个汉字也仅是一位密码,占两个字节  If (bEmpty(1) Xor bPa Password = Password + Chr(bEmpty(1) Xor bPass(1)) ' 将密码解密  End If  Next  Close 1, 2  MsgBox "Password:" + Password ' 显示密码  End Sub  下图显示了 Access 20 一、深入分析  上述程序成功的关键是使用 数据库(Pass_Protected_DB 码。  下图是在 Windows资源管理器 应注意的是:上面的“创建日期”只是操作系统级的,也就是 Win 的长短,每个文件在目录里占用至少32个字节,包括:文件名、属性 间和访问时间等)。  Access 2000 在数据库中也记录了该数据库的“创建日期”。加密数据库 日期”。该日期只有在数据库被成功打开后才能看到。但在一般情况 建日期”是完全一样的,因此这为破译者提供了方便。  上述程序中还有一点需要说明:为简明 效。若要解密汉字密码,须对双字节均做处理。  二、防范措 1、隐藏“创建日期”  从上面的分析可以看出,既然“创建日期”是破译的关键,那么我们 来。  第一步,创建数据库时,使用一个“不可思议的、别人 改为2026年05月15日,创建数据库后再将系统日期改回 期”。  第二步,修改操作系统级的“创建日期”。上述第一步完成后 5月15日,必须加以修改,以达到隐 二完成。     ' 程序二(VB6):修改文件在操作系统级的“ Private Ty dwLowDateTime As Long  dwHighDateTime As Long  End Type  Private Type SYSTEMTIME  wYear As Integer  wMonth As Integer  wDayOfWeek As Integer  wDay As Integer  wHour As Integer  wMinute As Integer  wSecond As Integer  wMilliseconds As Integer  End Type  Private Const GENERIC_WRITE Private Const O Private Const FILE_SHARE_READ = &H1  Private Sub Command1_Click()  Dim Year As Integer, Month As Integer, Day As Integer  Dim Hour As Integer, Minute As Integer, Second As Integer  Dim TimeStamp As Variant, Year = 2001: Month = 3: Day = 13 ' 准备设定的“创建日期”  Hour = 12: Minute = 0: Second = 26  TimeStamp = DateSerial(Year, Month, Day) + TimeSerial(Hour, Minute, Filename = X = ModifyFileStamp(Filename, TimeStamp)  End Sub  Function ModifyFileStamp(Filename As String, TimeStamp As Variant) As Integer  Dim X As Long, Handle As Long, Sy Dim File_Time As FILETIME, Local_Time As FILETIME  System_Time.wYear = Year( System_Time.wDay = Day(TimeStamp)  System_ime.wDayOfWeek = Weekday(TimeStamp) - 1  System_Time.wHour = Hour(TimeStamp): System_Time.wSecond = Second(TimeStamp)  System_Time.wMilliseconds = 0  X = SystemTimeToFileTime(System_Time, Local_Time)  X = LocalFileTimeToFileTime(Local_Time, File_Time) ' 转换成可用的类型  Handle = CreateFile(Filename, GENERIC_WRITE, FILE_SHARE_READ Or _  FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0) ' 打开文件  X = SetFileTimeWrite(Handle, File_Time, ByVal 0&, ByVal 0&) ' 设置日期  CloseHandle Handle ' 关闭文件  End Function  图三显示的是数据库的真实“创建日期”以及经程序二伪装的操作系统级的“假象”日期。 可以看出,隐藏 方法与下述的“方法二”相结合,才能达 2、使用用户级安全机制  通过设置不同的用户帐号和组帐号对数据库中的各种 设置各种帐号及相应权限的简单方法是使用“设置安全机制 三、结论  所谓“道高一尺魔高一丈”,因为这世上并没有绝对的安全。上述方法一的目的是 以接受的程 ss 2000数据库的密码忘了 在Access 2000 数据库中, 介绍一种密码破解方法。   用磁盘编辑工具打开Access 2000 所建的数据库,在库文 为:29 77 EC 37 F2 C8 9C 的密码,只要将00000042 处开始的40个字节还原成原始数据就行了。要做到这一点,你可用磁盘编辑工具或将以下所附的程序稍加修改,把以上所列40个数据填到00000042开始处。   但是,有没有办法既能破解密码又能保持原密码呢?有。要做到这一点,必须搞清楚Access 2000库的加密原理。事实上,Access 2000库的加密原理很简单。当你设置了密码后,Access 2000 就将你的密码(请注意你所输入的密码是ASCII字符)的ASCII码与以上的40个字节数据进行异或操作,因此,从库文件的地址00000042开始的40个字节就变成了密钥了。例如,如果你设置的密码为12345678901234567890(注意:最多只能设20个ASCII字符),经过异或操作后,则从00000042处开始的40个字节的数据就变成了 18 77 DE 37 C1 C8 A8 FA 5C D2 1E E6 8B 3A B2 60 C2 18 4B 36 6B FE ED B1 EB 78 27 43 55 23 87 33 AC ED 41 5B 04 39 4C 2A 。大家都知道,一个数据经过一次异或操作后,再一次经过同样的异或操作就可还原了。因此,对已经设置了密码的Access 2000库,只要将40个密钥数据与原始的40个数据进行一次异或操作就可得到密码了。   顺便提一下,由于ACCESS 2000对每个密码字符采用双字节表示,故40个字节原始数据可依次分为20组,每组代表一个密码字符,进行异或操作的是每组的第一个字节,第二个字节不变 在前端设系统时间与局域网中后端系统时间相同 shell ("net time \\服务器名 /set /yes"),vbHide 链接密码保护的数据库 作者: 朱亦文  function lj() dim catdb as adox.catalog dim tbllink as adox.table set catdb = new adox.catalog catdb.activeconnection = currentproject.connection set tbllink = new adox.table ' 建立一个新的表对象 with tbllink .name = "订单" ' set .parentcatalog = catdb .properties("jet oledb:create link") = true .properties("jet oledb:link datasource") = _ "c:\program files\zhanyexing\123.mdb" .properties("jet oledb:link provider string") = _ "ms access;pwd=123;" ' 提供者及密码 .properties("jet oledb:remote table name") = "订单" ' 原数据库中的表 end with catdb.tables.app set tbllink = nothing end function 注:在vba编辑器中引用"microsoft ado ext. 2.5 for ddl and security"以及 rosoft activex data objects 2.1/2.5/2.6/2.7 library" 动手做一个专用解密器     密器也很费时,如果你对 要了解Access数据库的加密方法。A 67至79位为一固定 ,FA,C6,5 ,5E,28 s数据库的解密 tion属性设为“取得 mand1_Click   Dim pa te Dim sour  = &H86 s  &H37 source 4  = &H5D so H9C sour 5E sou H13 Comm ame = ″″ Then Exit Sub Open Comm r Binary As #1 emp = source i  The hr  temp Xor word  = 0 t = ″该数据库的密码为: 后台数据库的方法 地球人都知道,MDB文件很 我用过不少Access密码破解器,大多数 一定有人会说,既然人家能写出破解英文密码的软件,一定也可以写出破解中文密码 MDB的头16个字 动一个或多个字节,Acce 打开文件时, 另一种做法是打开   '使后台可以正常访问 Function OpenHt(HTmdbPath As String) Dim fh As Integer fh = FreeFile Open HTmdbPath For Binary Access Write As #fh Put fh, 2, &H1 Close #fh End Function   '使后台无法正常访问 Function CloseHt(HTmdbPath As String) Dim fh As Integer fh = FreeFile Open HTmdbPa Put fh, 2, &H0 Close #fh End Fu '下面的都是跟后台建立物理连接的函数(必须放在模块 Public HTcn As Connection Public HTrs As New ADODB.Recordset Public HTsql As String '建立物理连接 Function OpenStandHT()   Set HTcn = CurrentProject.Connection '表1要改成相应的表名   HTsql = "select * from  表1"   HTrs.Open HTsql, HTcn, 3, 3, 1 End Function '关闭物理连接 Fun   HT   Set End Func Yhcwgl注 Private Sub Form_Open(Cancel As Integer) Dim a As Long  Dim b As Long  b = GetSetting("MyApp", "set",  a = b Xor 51345   If a < 50 Then   MsgBox "感谢使用《银   "提示:在注册前,您还有" & 50 - a & "次可以使用!" & vbCrLf & _   "               请您尽快注册!       " & vbCrLf & _   "                    "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   "           欢迎您访问立文工作室" & vbCr   "                                           " & vbCrLf & _   "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" & vbCrLf & _   "              联系人:于立文" & vbCrLf & _   "         电话: 13945431870" & vbCrLf & _   "   gfuuyygy@  gfuuyygy@" & vbCrLf & _   "                                           " & vbCrLf & _   "~~~~~~~~~~~~~~~  a = a + 1  b = a Xor 51  SaveSetting "MyApp", "set", "times", b Else   MsgBox "您的试用期已过,请您注册!" & vbCrLf & _   "        "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" & vbCrLf & _   "           欢迎您访问立文工作室   "                                           " & vbCrLf & _   "~~~~~~~~~~~~~~~   "              联系人:于立文" & vbCrLf & _   "         电话:13945431870"   "   gf   "                                           " & vbCrLf & _   "~~~~~~~~~~~~~~~~~~~~~~~~  DoCmd.Quit     End If End Sub 口令 1、动态口令。即每次登陆的口令是不同的。能够防止他人偷 口令,能防止暴力破解工具的破解。 2、可自定义 3、可自定义每组口令的出错次数。 4、在“口令维护”窗口内三分钟不操作,将提示 5、通过一定的加密手段来保护数 动态口令的使用原理:   每次登陆时,系统会提示一个时间,您根据 动态口令的规则设置: 1、本程序以“@”的符号代表系统提示的时间。  登陆时假定系统以09:03:05时间来提示:  设定的规则  @                                       90305        可不参与运  @+1                                     90306  @&"p"                                   903  left(@,1 2、反正能用“表达式”表达出来   3、在“口令维护”窗体的每一记录就是一个登陆口令的规则,而录入几条记录就有几组口令,和普通入数据是一样的。 现提供 登陆 1、打开“主菜单”窗口前检验是否已登陆,是,则进入“主菜单”界面。否,则进入“登陆”窗体。 2、进入“登陆 验程序。 3、“登陆口令”检验程序,口令 窗口”,否,则打开“主菜单”界面。 4、在口令维护窗口上若连续3分钟无操作 操作,则退出系统。 5、退出“口令维护”窗口时,检验是否设置 “口令维护”界面进行口令的设置。 其他: 1、其实这些功能编 这种的检验,技术也无法提高。 2、由于这是本人一时兴起刚刚编制的, 。烦死了。因此也没怎么测试,不敢保证程序没有什么 3、登陆的使用人是结合 登陆效果。 4、本人仅想演绎一下登陆的功 以指定工作组文件启动MDB文件 , 下几种:  1。用快捷方式,在其中加上启动参数指定工作组文件;  2。用ACCESS内置工作组管理员 3。也可以直 4。用VB之类的东东做个外壳启动带参数 第一种方式用户在使用中容易造成丢失。  第二第三种其实是一样的,但设 敝人推荐用 其实 Set fs = Application.FileSearch ''查找文件  With fs    .LookIn = "C:\Program Files\Microso   .SearchSubFolders = True   .FileName = "msacc       If .Execute() > 0 T    p = .FoundFiles(1)  ''ACCESS主程序完整路径     Shell p & " " & CurrentPro   Else     MsgBox "C:\Progr   End If  End With  docmd.qu 将外壳做成MDE交付用户便万事大吉啦。 带参数启动程序语句可更改为以下 Shell SysCmd(acSysCmdAccessDir) rrentProject.Path 注意,如果要将密码和用户 BA中修改安全机制的登录密码 ----------大頭  Private Sub On Error GoT   Dim myuser   Dim A As Variant   Dim B As Variant   Dim Glbuser As String   Glbuser = CurrentUser   A = Me![CO   B =   If IsNull(A)   MsgBox "未取得帳號,   GoTo Exit_OkButton   End   If Len(A)   MsgBox "通行密碼不得   GoTo Exit_OkButton_Click   End If      Set MyWorkspace = DBEngine.Wor   DBEngine.Works   MsgBox "通行密碼已變更為" & A, 64,    DoCmd.Close Exit_OkButton_Click   Exit S Err   MsgBox "原有通行密碼不正確,請重新輸   Resume End Sub 和取消shift键的方法(建立、运行模块)1 Sub SetBypassProperty() Const DB_Boolean As Long = 1 ChangeProperty "AllowBypassKey", DB_Boolean, F End Sub Function ChangeProperty(strProp Dim dbs As Object, prp As Variant Const conProp Set dbs = CurrentDb On Error GoTo Change_Err dbs.Properties(strPropName) = varPropValue ChangePropert Change_Bye: Exit Function Change_Err: If Err = conPropNotFoundE Set prp = dbs.CreateProperty(st varPropType, varPropValue) dbs.Properties.Append prp Resume Next Else ' Unknown err ChangeProperty = False Resume Change_Bye End If End Function 取消屏蔽shift键的方 做一個表 cproperty "AllowByPassk 再自定義一段SUB如下: Sub cproperty(pName, pType, On Error G Set prp = Curre CurrentD Me![核取0] = pValue Exit Sub ki: Me![核取0] = CurrentDb.P End Sub 確定按鈕的On click事件寫上: CurrentDb.Properties("AllowByPasskey") = Me![核取0] MsgBox "更改完成,必 那麼您要啟動或屏蔽 和取消shift键 Function SetBypassPro Const DB_Boolean As Long =   ChangeProperty "AllowBypassKey", DB_Boolean, False End Function Function Se Const DB_Boolean As Long = 1   ChangeProperty "AllowBypassKey", DB_Boolean, True End Function Function ChangeProperty(strPropName As String, varPropType As Variant, varPropV   Dim dbs As Object, prp As Variant   Const conPropNotFoundError = 3270   Set dbs = CurrentDb   On Error GoTo Change_Err   dbs.Properties(strPropName) = varPropValue   ChangeProperty = True Change_Bye:   Ex Change_Err:   If Err = conPropNotFoundError Then    ' Property not found.       Set prp = dbs.CreateProperty(strPropName, _           varPropType, varPropValue)       dbs.Properties.Append prp       Resume Next         ' Unknown error.       ChangeProperty = False       Resume Change_Bye   End If End Function 屏蔽:   SetBypassPropertyFalse   MsgBox "禁用shift设置成功,在下次启动应用程序时生效 取消:   SetBypassPropertyTrue   MsgBox "启用shift设置成功,在下次启动应用程序时生效。请重新启动程序。", , "设置成功 access的用户密码、数据库密码同时生效的情况下,如何用ADO访问? 试一下下面这个连接串 数据库:C:\db1.mdb 数据库密码:pass 用户: Admin 用户密码: winstar 用户组文件: system.mdw  //system.mdw这个文件要放在与 //如果没有这个文件就不行。 设 提供者页:选JET4.0 O LEDB 引擎 边线页:输入数据库路径与名称C:\db1.mdb,用户Admin,用 全部页:1、Jet OLEDB:Database Pas     2、Jet OLEDB:System database 输入用户组文件: s //下面是我从ADOConnection1中COPY出 Provider=Microsoft.Jet.OLEDB.4.0;P e Deny None;Extended Properti "";Jet OLEDB:Database Password=pass t OLEDB:Global Partial Bulk Ops=2;Jet OL ssword="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encryp t Copy Locale on Compact=False;Jet e  是现成的工具破解 system.mdw是用户组数据库,里面有所 这个文件是要与.mdb数据库一起发布的。鼠标点过后,0秒 我用的是BCB6+SP2 , MDAC2. 出现:“多步 OLE操作失败,请检查每个OLE状态值,没有工作被完成。” 请用Access打开你的数据库,   Provider=Microso are Deny None;Ex \system.mdw;Jet OLEDB: Jet sactions=1;Jet OLEDB:New ncrypt Database=False;Jet lica Repair=False;Jet 我用的是Access2000+Win XP Professinal+B 首先用超级用户在ACCESS里创 户密码改为Us 将C:\program files\microsoft office\office下的system.mdw拷贝到MDB所在的目录。 BCB6中用ADO Connection连接MDB,构造上述连接串,可以连接成功。 通过编程设置数据库密码 按以下语法使用关键字 ALTER DATABASE,您可以编程设置、修改或删除数据库密码。 ALTER
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服