设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 5092|回复: 7
打印 上一主题 下一主题

[加解密/安全] [转帖]了解 Microsoft Access 安全性

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2004-7-7 18:06:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
<转自: http://www.microsoft.com/china/msdn/library/office/office/odc_AcSecurity.mspx>



了解 Microsoft Access 安全性

发布日期: 10/15/2002 | 更新日期: 6/9/2004

Frank C. Rice

Microsoft Corporation

适用于:Microsoft&reg; Access 2002

摘要:本文介绍对 Microsoft Access 2002 数据库提供各种级别保护的不同方法。简介

在早期版本的 Microsoft&reg; Access(Microsoft Access 2000 以前)中,有关安全性的知识有时被认为是无法为任何人所掌握和应用的。您需要按顺序执行很多步骤,一旦遗漏某个步骤或者颠倒了顺序就会带来灾难性的后果。随着 Microsoft Access for Microsoft Windows&reg; 95 的 Security Wizard 出现,以及 Microsoft Access 2000 的 Security Wizard 的不断改进,在 Access 中实现安全性已变得非常简单。但是,即使有了这些帮助,您也必须清楚自己的安全选项,并掌握在数据库中保护数据和对象的操作。否则,轻者会带来数据安全隐患,重者会将您锁在自己的数据库之外。

有很多方法可以保护您的 Access 数据库以及其中包含的数据。在本文中,我们将讨论用于保护组成数据库的各个对象(包含数据)、包含诸如窗体和报表等元素的对象以及代码(可能是数据库中最有价值的部分)的方法。本文中讨论的安全技巧只适用于 Microsoft Access 数据库 (.mdb) 文件。需要了解的有关保护敏感数据的知识

您应该知道,有很多工具和第三方实用程序可以用于探测任何类型的数据库的密码,以及来自任何工作组信息文件的用户名和密码(本文后面将详细介绍工作组信息文件)。如果需要保护敏感数据免受非法访问,最好的安全措施就是使用计算机操作系统提供的文件级安全性和文件共享安全性。文件级安全性涉及在数据文件上设置权限。文件共享安全性涉及限制对数据文件存储位置的访问。文件共享安全性的一个示例是在存储数据文件的文件夹(位于本地计算机或网络服务器上)上设置用户权限。为此,可以将数据拆分到多个文件中,在这些文件上设置用户权限,再将这些文件放置到受保护的文件共享空间中。然后可以从具有安全设置的 Access 数据库链接到这些文件。Access 安全性概述

以下各节介绍了几种保护 Access 数据库的方法。加密或解密数据库

最简单(也是安全性最低)的保护方法是对数据库进行加密。加密数据库就是将数据库文件压缩,从而使某些实用程序(如字处理器)不能解读这些文件。加密一个不具有安全设置的数据库并不能保证数据库的安全,因为任何人都可以打开数据库并完全访问数据库中的所有对象。有关对数据库进行安全设置的详细内容,请参阅本文后面的使用 Security Wizard 设置 Access 数据库的安全性。

加密可以避免在以电子方式传输数据库或者将其存储在软盘、磁带或光盘上时,其他用户偶然访问数据库中的信息。然而 Jet(Access 使用的数据库引擎)使用的加密方法非常薄弱,因此绝不能用于保护敏感数据。“加密/解密数据库”命令位于“工具”菜单的“安全”子菜单中。解密数据库是对加密过程的逆运算。使用自定义界面

另一种相对简单的保护方案是使用自定义界面代替 Access 标准界面。与加密一样,它也不能保护数据库中的对象和敏感数据的安全。通过选择“工具”菜单中的“启动”选项,您可以指定自定义的启动窗体、菜单,甚至自定义的标题和图标。还可以选择取消 Database 窗口,从而对缺乏相应技术的应用程序用户隐藏这些对象。“启动”对话框的各项功能也可以通过编程实现。有关如何从“启动”对话框设置启动选项的详细信息,请参阅 Access 帮助中的“关于启动选项”。有关如何通过编程设置启动选项的详细信息,请参阅 Access 帮助 Microsoft Visual Basic&reg; 编辑器的“设置‘启动’选项和编码中的选项”。设置数据库密码

您可以在数据库上设置密码,从而要求用户在访问数据和数据库对象时输入密码。

注意:使用密码保护数据库或其中的对象的安全性也称为共享级安全性。

<FONT face=Verdana>您不能使用此选项为用户或组分配权限,因此任何掌握密码的人都可以无限制地访问所有 Access 数据和数据库

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅

点击这里给我发消息

2#
 楼主| 发表于 2004-7-7 18:10:00 | 只看该作者
下面我们来看看用户级安全性。关于 Access 用户级安全性

Access 使用 Microsoft Jet 数据库引擎来存储和检索数据库中的对象。Jet 数据库引擎使用基于工作组的安全模型(也称为用户级安全性)来判断谁可以打开数据库,并保护数据库所包含对象的安全。无论是否明确设置了数据库的安全性,用户级安全性对所有 Access 数据库始终处于打开状态。您可以通过操纵用户和组帐户的权限和成员身份来更改 Access 中的默认安全级别。下面将对此进行介绍。



无论何时启动 Access,Jet 数据库引擎都要查找工作组信息文件(默认名称为 system.mdw,也可以使用扩展名 .mdw 任意命名)。工作组信息文件包含组和用户信息(包括密码),这些信息决定了谁可以打开数据库,以及他们对数据库中的对象的权限。对单个对象的权限存储在数据库中。这样,例如,就可以赋予一个组的用户(而不是其他用户)使用特定表的权限,而赋予另一个组查看报表的权限,但不能修改报表的设计。



工作组信息文件包括内置组(Admins 和 Users)以及一个通用用户帐户 (Admin),该帐户具有管理数据库及其包含的对象的权限(无限制)。您也可以使用菜单命令(“工具”菜单中的“安全”子菜单)或者通过 VBA 代码添加新的组和用户。



注意:安装 Access 时,安装程序会自动创建工作组信息文件,并使用您指定的名称和单位信息来命名。因为这一信息通常很容易被判断出来,因而未经授权的用户很可能会创建另一个版本的工作组信息文件,从而在由该工作组信息文件定义的工作组中,为自己设定一个不可撤消的管理员帐户(Admins 组的成员)权限。为防止发生这种情况,应创建一个新的工作组信息文件,并指定唯一的工作组 ID (WID)。这样,只有知道 WID 的用户才能创建该工作组信息文件的副本。本文后面将讨论使用 User-level Security Wizard 创建新的工作组信息文件。

Admins 组不能被删除,其成员具有不可撤消的管理权限。您可以通过菜单或代码删除 Admins 组的权限,但 Admins 组的任何成员都可以重新添加权限。此外,Admins 组中必须始终至少有一个管理数据库的成员。对于没有进行安全设置的数据库,Admins 组始终包含默认的 Admin 用户帐户,它也是所有用户默认登录的帐户。



所有用户必须属于默认的 Users 组,不管他们是否还属于其他组。您可以在 VBA 中创建用户帐户,而并不将新的用户帐户添加到 Admins 组中。然而,如果不同时将该用户帐户添加到 Admins 组中,该用户将无法成功启动 Access,因为 Access 内部使用的用于管理数据库的很多表都映射到 Users 组的权限。

使用以下步骤进行 Access 数据库的安全设置:



1.将新用户帐户添加到 Admins 组中。该用户对数据库中的对象具有管理权限。

2.从 Admins 组中删除默认的 Admin 用户帐户。

3.从 Admin 用户和 Users 组中删除权限。

4.为所创建的任何自定义组分配权限。

在默认 Admin 用户帐户上设置密码会激活登录对话框,从而每次启动 Access 时都会提示用户输入用户名和密码。如果您没有在 Admin 帐户上设置密码,用户将自动作为 Admin 用户登录,无需密码,也不会出现登录对话框。

对数据库中对象的权限可以是显式的(直接分配给用户帐户)或隐式的(从用户所属的组继承),也可以是两者的结合。Access 在权限问题上使用“最少限制”规则,即用户的权限包括其显式和隐式权限的总和。例如,如果用户 A 的帐户具有限制权限,而用户 A 属于一个具有限制权限的组,同时也属于另一个具有管理(所有)权限的组,那么用户 A 将具有管理权限。有鉴于此,通常最好不要为用户帐户分配显式权限。而应创建具有不同权限的组,然后将用户分配给具有适当权限的组,这会减少数据库管理方面的麻烦。

在以下各节中,我们将展示如何通过用户界面和编程手段来保护数据库及其包含的对象。首先,我们来看看几种设置数据库密码的不同方法。

点击这里给我发消息

3#
 楼主| 发表于 2004-7-7 18:12:00 | 只看该作者
手动设置数据库密码

您可以为数据库设置密码,从而要求用户在访问数据库时输入密码。然而,一旦用户登录后,便可以不受限制地访问数据库中的数据和对象。

注意:在设置数据库密码之前,建议备份数据库并将其存储在一个安全的位置。

在设置数据库密码之前,需要以独占方式打开数据库。要以独占方式打开数据库



1.如果数据库处于打开状态,关闭数据库。

2.单击“文件”菜单中的“打开”重新打开数据库。

3.在“打开”对话框中,找到数据库,单击“打开”按钮旁边的箭头,然后单击“以独占方式打开”。

要手动设置数据库密码



1.在“工具”菜单中,指向“安全”,然后单击“设置数据库密码”。

2.在“密码”框中,键入密码。注意:密码区分大小写。

3.在“验证”框中,重新键入密码以确认,然后单击“确定”。

现在就设置了数据库密码。下次您或其他用户打开数据库时,会出现一个对话框要求输入密码。下面我们来看看如何通过编程设置数据库密码。

点击这里给我发消息

4#
 楼主| 发表于 2004-7-7 18:30:00 | 只看该作者
通过编程设置数据库密码

按以下语法使用关键字 ALTER DATABASE,您可以编程设置、修改或删除数据库密码。



ALTER DATABASE PASSWORD NewPassword OldPassword

在这个语句中,密码由方括号 ([]) 分隔的 String 值表示,但下述情况例外。

第一次设置数据库密码时,使用 NULL 关键字作为 ALTER DATABASE 语句中的 OldPassword 参数。要删除数据库密码,请使用 NULL 关键字作为 ALTER DATABASE 语句的 NewPassword 参数。在这些情况下,关键字 NULL 不应出现在方框中。

在使用以下过程之前,可能需要设置对 Microsoft ADO Ext 2.5 for DDL and Security 库的引用(如果尚未设置):



1.在 Visual Basic 编辑器中,指向“工具”菜单中的“引用”。将显示“引用”对话框。

2.选中 Microsoft ADO Ext 2.5 for DDL and Security 复选框。

请看以下第一次设置密码时的代码:

Private Function CreateDBPassword(ByVal Password As String, _

ByVal Path As String) As Boolean

Dim objConn as ADODB.Connection

Dim strAlterPassword as String

On Error GoTo CreateDBPassword_Err

' 创建 SQL 串以初始化一个数据库密码。

strAlterPassword = "ALTER DATABASE PASSWORD [Password] NULL;"

' 打开不具有安全设置的数据库。

Set objConn = New ADODB.Connection

With objConn .Mode = adModeShareExclusive

   .Open "rovider=Microsoft.Jet.OLEDB.4.0;Data " & _

            "Source=Path;"

   ' 执行 SQL 语句对数据库进行安全设置。

   .Execute (strAlterPassword)

End With



' 清除对象。

objConn.Close

Set objConn = Nothing

' 如果成功,返回 true。

CreateDBPassword = True



CreateDBPassword_Err:

   Msgbox Err.Number & ":" & Err.Description

   CreateDBPassword = False

End Function

此过程接受用户的密码以及 .mdb 文件的路径。首先,我们声明一个变量,代表对不具有安全设置的数据库的连接,同时声明一个 String 变量以包含我们用于更改密码的 SQL 语句。下一步,我们将 strAlterPassword 设置给使用 ALTER DATABASE PASSWORD 关键字的 Jet SQL 语句。请注意,因为我们不是要替换密码,因而第二个参数被设置为 NULL。下一步,我们打开一个到该数据库的连接。要设置密码,必须以独占方式打开数据库,因此要设置 Mode 属性。然后执行 SQL 语句。您通常可以从一个数据库运行此过程,以便在一个单独的不具有安全设置的数据库中设置密码。如果一切正常,函数返回 True。

如果要更改具有安全设置的数据库的密码,首先需要使用旧密码登录数据库,然后再更改密码。以下过程显示了这一技术。

在使用以下过程之前,可能需要设置对 Microsoft ADO Ext 2.5 for DDL and Security 库的引用(如果尚未设置):



1.在 Visual Basic 编辑器中,指向“工具”菜单中的“引用”。将显示“引用”对话框。

2.选中 Microsoft ADO Ext 2.5 for DDL and Security 复选框。

请看以下过程:

Private Function ChangeDBPassword(ByVal OldPassword As String, _

        ByVal NewPassword As String, ByVal Path As String) As Boolean

Dim objConn as ADODB.Connection

Dim strAlterPassword as String

On Error GoTo ChangeDBPassword_Err

' 创建 SQL 串以更改数据库密码。

strAlterPassword = "ALTER DATABASE PASSWORD [NewPassword] [OldPassword];"

' 打开具有安全设置的数据库。

Set objConn = New ADODB.Connection

With objConn

   .Mode = adModeShareExclusive

   .Provider = "Microsoft.Jet.OLEDB.4.0"

   .Properties("Jet OLEDBatabase Password") = "OldPassword"

   .Open "Data Source=Path;"

   ' 执行 SQL 语句以更改密码。

   .Execute (strAlterPassword)

End With

<FONT face=Verdana>' 清除对

点击这里给我发消息

5#
 楼主| 发表于 2004-7-7 18:33:00 | 只看该作者
使用 Security Wizard 设置 Access 数据库的安全性

可以使用 Security Wizard 设置数据库的安全性。为此,请执行以下步骤:

<TABLE cellSpacing=0 cellPadding=0 border=0>







1.



打开要设置安全性的数据库。





2.



在“工具”菜单中,指向“安全”,然后单击“设置安全机制向导”。将显示“设置安全机制向导”对话框。





3.



因为我们要创建一个新的工作组信息文件,因此请确保选中此选项,然后单击“下一步”。





4.



在“设置安全机制向导”对话框的第二个屏幕中(见图 1),为工作组信息文件键入一个新名称,或者接受默认名称。键入一个工作组 ID (WID)。WID 唯一标识了此工作组文件的 Admins 组。下一步,在相应的文本框中键入您的姓名和单位。虽然这些输入是可选的,但最好还是填入,因为只有知道这些信息的人才能重新创建工作组信息文件。









5.



您也可以选择是否使用此工作组信息文件作为所有数据库的默认文件,或者只是用于这个特定的数据库。单击“创建快捷方式,打开设置了安全机制的数据库”选项,然后单击“下一步”。





6.



在下一个屏幕中(见图 2),可以选择希望向导设置其安全机制的对象。默认情况下,向导将为所有现有对象和所有新创建的对象设置安全机制。单击“下一步”。





图 2:“设置安全机制向导”对话框的第三个屏幕







7.



在下一个屏幕中(见图 3),您可以选择可选的具有特定权限的安全组。我们强烈建议您使用组来管理用户的访问权限,而不是赋予每个用户特定的权限。选择任何其他组帐户,然后单击“下一步”。





图 3:“设置安全机制向导”对话框的第四个屏幕







8.



在此屏幕中(见图 4),您可以为 Users 组设置特定的权限。因为所有用户都自动成为 Users 组的成员,在此选择的任何权限都会应用于所有用户,所以最好限制该组的权限,或者保留默认设置 - 没有任何权限。单击“下一步”。





图 4:“设置安全机制向导”对话框的第五个屏幕



<TR vAlign=top>



9.

<TD>

在下一个屏幕中(见图 5),您可以向工作组信息文件中添加用户。还可以为每个用户选择密码和个人 ID (PID)。Access 使用 PID 和帐户名为工作组标识唯一的用户。添加用户并单击“下一步”。

<FONT face=Verdana size=2>注意:个人标识符 (PID) 不是密码。它被加密并与名称一起创

点击这里给我发消息

6#
发表于 2004-7-7 18:33:00 | 只看该作者
非常详细具体 收到

点击这里给我发消息

7#
 楼主| 发表于 2004-7-7 18:35:00 | 只看该作者
通过编程添加和删除用户和组

为数据库设置了安全性后,您可能需要使用用户和组。以下各节展示了其中的一些技巧。

在使用以下各节介绍的过程之前,可能需要设置对 Microsoft ADO Ext 2.5 for DDL and Security 库的引用(如果尚未设置):











在 Visual Basic 编辑器中,指向“工具”菜单中的“引用”。将显示“引用”对话框。







选中 Microsoft ADO Ext 2.5 for DDL and Security 复选框。

添加和删除用户

以下过程将创建一个新的用户帐户,然后将其追加到用于当前数据库的工作组信息文件中的默认 Users 组。

注意:要在 Access 中使用下面的示例,您需要作为 Admins 组的成员登录并打开一个数据库。在下面的过程中,您要确保工作组信息文件不包含在 strUser 中指定了其名称的用户。例如,您可以先调用 DeleteUser 子例程来确保这一点。请看以下代码:Private Function AddUser(ByVal strUser As String, _

       ByVal strPID As String, _

       Optional ByVal strPwd As String) As Boolean

   Dim catDB As ADOX.Catalog

   On Error GoTo AddUser_Err

   ' 实例化 Catalog 对象。

   Set catDB = New ADOX.Catalog

   With catDB

       ' 使用到当前数据库的连接打开

       ' Catalog 对象。

       .ActiveConnection = CurrentProject.Connection

       ' 创建新的用户帐户。

       .Users.Append strUser, strPwd, strPID

       ' 向默认 Users 组追加新的用户帐户。  

      .Groups("Users").Users.Append strUser

   End With

   ' 关闭 Catalog 对象。

   Set catDB = Nothing

   AddUser = True





AddUser_Err:

   Msgbox Err.Number & ":" & Err.Description

   AddUser = False

End Function

该过程首先为 Catalog 对象声明一个变量,然后实例化该对象。

注意Catalog 对象是 Access 数据库文件中所有对象的容器。

然后,该过程打开到当前数据库的连接,并使用来自调用过程的参数,将新用户追加到 Catalog 对象的 Users 集合中。然后新用户被追加到默认的 Users 组。Users 集合包含了在工作组信息文件中定义的数据库的所有用户。

要删除现有用户,可以使用以下过程:Private Function DeleteUser(ByVal strUser As String) As Boolean

   Dim catDB As ADOX.Catalog

   On Error GoTo DeleteUser

   ' 实例化 Catalog 对象。

   Set catDB = New ADOX.Catalog

   With catDB

       ' 在当前数据库中打开 Catalog 对象。

       .ActiveConnection = CurrentProject.Connection

       ' 删除 strUser。

       .Users.Delete strUser

   End With

   ' 关闭 Catalog 对象。

   Set catDB = Nothing

   DeleteUser = True



DeleteUser_Err:

   Msgbox Err.Number & ":" & Err.Description

   DeleteUser = False



End Function

此过程与前面的过程类似,只是使用了 Catalog 对象的 Delete 方法删除了在 strUserString 参数中指定的用户。

添加和删除组

添加组的过程与添加用户的过程类似。<RE><FONT face=Verdana size=2>rivate Function AddGroup(ByVal strGroup As String, _

       ByVal strPID As String) As Boolean

   Dim catDB As ADOX.Catalog

   On Error GoTo AddGroup_Err

   Set catDB = New ADOX.Catalog

   With catDB

       ' 在当前数据库中打开 Catalog 对象。

       .ActiveConnection = CurrentProject.Connection

       ' 创建新的组。

       .Groups.Append strGroup, strPID

   End With

   ' 关闭 Catalog 对象。

   Set catDB = Nothing

点击这里给我发消息

8#
 楼主| 发表于 2004-7-7 18:36:00 | 只看该作者
小结在本文中,我们讨论了实现 Access 数据库不同保护级别的各种方法,介绍了共享级和用户级安全性。同时还介绍了如何使用 Access Security Wizard 以及如何通过编程来实现安全设置。 <全文完>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-29 01:24 , Processed in 0.115170 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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