如果在 Access 2007 之前的 Access 版本中创建了数据库,并且对该数据库应用了用户级安全性,则当您在 Access 2007 或更高版本中打开该文件时,这些安全设置将保留到位。 此外,可以从更高版本的 Access 启动 Microsoft Office Access 2003 提供的安全工具(User-Level 安全向导和各种用户和组权限对话框)。 本文介绍 Access 2003 安全功能的工作原理,以及如何在 Access 2007 或更高版本中启动和使用它们。
注意: 本文中的信息仅适用于在 Access 2003 或更低版本中创建的数据库, (.mdb文件) 。 用户级别安全性不适用于在 Access 2007 或更高版本中创建的数据库 (.accdb 文件) 。 此外,如果将 .mdb 文件转换为 (.accdb 文件) 的新格式,Access 将放弃用户级安全设置。
本文内容
用户级别安全性在 Access 2007 或更高版本中的行为方式
Access 2007 及更高版本仅为使用 Access 2003 及更早文件格式 (.mdb 和 .mde 文件) 的数据库提供用户级安全性。 在更高版本中,如果打开在早期版本的 Access 中创建的数据库,并且该数据库应用了用户级安全性,则此安全功能将按照该数据库的设计工作。 例如,用户必须输入密码才能使用数据库。
此外,可以启动和运行 Access 2003 及更早版本提供的各种安全工具,例如“User-Level 安全向导”以及各种用户和组权限对话框。 继续操作时,请记住,只有在打开.mdb或 .mde 文件时,这些工具才可用。 如果将文件转换为 .accdb 文件格式,Access 将删除所有现有的用户级安全功能。
Access 2003 用户级安全性概述
以下部分提供有关 Access 2003 及更早版本中用户级安全性的背景信息。 如果已熟悉以前的安全模型和用户级安全性,可以跳过这些部分,直接转到本文后面的设置用户级别安全性或删除用户级安全性。
用户级安全性的基础知识
Access 中的用户级安全性类似于基于服务器的系统上的安全机制 ,它使用密码和权限来允许或限制个人或个人组对数据库中对象的访问。 在 Access 2003 或更早版本中,在 Access 数据库中实现用户级安全性时,数据库管理员或对象的所有者可以控制单个用户或用户组可以对数据库中的表、查询、窗体、报表和宏执行的操作。 例如,一组用户可以更改数据库中的对象,另一组用户只能将数据输入到某些表中,第三组只能查看一组报表中的数据。
Access 2003 及更早版本中的用户级安全性使用密码和权限的组合,这是一组属性,指定用户对数据库中数据或对象的访问权限类型。 可以为个人或个人组设置密码和权限,这些密码和权限组合将成为安全帐户,用于定义允许访问数据库中对象的用户和用户组。 反过来,用户和组的组合称为工作组,Access 会将该信息存储在工作组信息文件中。 启动时,Access 会读取工作组信息文件,并根据文件中的数据强制实施权限。
默认情况下,Access 提供一个内置用户 ID 和两个内置组。 默认用户 ID 为 管理员,默认组为“用户”和“管理员”。 默认情况下,Access 会将内置用户 ID 添加到用户组,因为所有 ID 必须至少属于一个组。 反过来,用户组对数据库中的所有对象拥有完全权限。 此外,管理员 ID 也是管理员组的成员。 管理员组必须包含至少一个用户 ID, (必须有数据库管理员) ,并且管理员 ID 是默认数据库管理员,直到你对其进行更改。
启动 Access 2003 或更早版本时,Access 会为你分配管理员用户 ID,从而使你成为每个默认组的成员。 该 ID 和这些组 (管理员 和用户) 授予所有用户对数据库中所有对象的完全权限 - 这意味着,除非你实现用户级安全性,否则任何用户可以打开、查看和更改所有.mdb文件中的所有对象。
在 Access 2003 或更低版本中实现用户级安全性的一种方法是更改用户组的权限,并将新管理员添加到管理员组。 执行此操作时,Access 会自动将新用户分配到用户组。 执行这些步骤时,用户必须在打开受保护的数据库时使用密码登录。 但是,如果需要实现更具体的安全性(例如,允许一组用户输入数据,允许另一组用户仅读取该数据),则必须创建其他用户和组,并向他们授予对数据库中的部分或所有对象的特定权限。 实现这种类型的用户级安全性可能会成为一项复杂的任务。 为了帮助简化该过程,Access 提供了 User-Level 安全向导,以便更轻松地在一步流程中创建用户和组。
User-Level 安全向导可帮助你分配权限以及创建用户和组帐户。 用户帐户包含用户名和唯一的个人 ID 号 (PID,) 管理用户在 Access 工作组中查看、使用或更改数据库对象的权限时所需的 PID。 组帐户是用户帐户的集合,反过来又驻留在工作组中。 Access 使用组名称和 PID 来标识每个工作组,分配给组的权限将应用于该组中的所有用户。 有关使用向导的详细信息,请参阅本文后面的 设置用户级安全性。
完成向导后,可以手动分配、修改或删除工作组中数据库及其现有表、查询、窗体、报表和宏的用户和组帐户的权限。 还可以设置 Access 为你或其他用户添加到数据库的任何新表、查询、窗体、报表和宏分配的默认权限。
工作组和工作组信息文件
在 Access 2003 和更早版本中,工作组是多用户环境中共享数据的一组用户。 工作组信息文件包含为每个用户或用户组设置的用户和组帐户、密码和权限。 打开数据库时,Access 会读取工作组信息文件中的数据,并强制实施该文件包含的安全设置。 反过来,用户帐户是用户名和个人 ID (PID) 的组合,Access 创建用于管理用户权限。 组帐户是用户帐户的集合,Access 还通过组名和个人 ID (PID) 标识它们。 分配给组的权限适用于组中的所有用户。 然后,可以为这些安全帐户分配数据库及其表、查询、窗体、报表和宏的权限。 权限本身存储在启用了安全性的数据库中。
用户首次运行 Access 2003 或更早版本时,Access 会自动创建 Access 工作组信息文件,该文件由用户在安装 Access 时指定的名称和组织信息标识。 对于 Access 2003,安装程序将此工作组信息文件的相对位置添加到以下注册表项:
HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Access\Jet\4.0\Engines\SystemDB
和
HKEY_USERS\.DEFAULT\Software\Microsoft\Office\11.0\Access\Jet\4.0\Engines\SystemDB
后续用户将从HKEY_USERS注册表项中的 值继承默认工作组文件路径。 由于此信息通常易于确定,因此未经授权的用户可能会创建此工作组信息文件的另一个版本。 因此,未经授权的用户可以假定管理员帐户 (管理员组成员) 该工作组信息文件中定义的不可撤销的权限。 若要防止未经授权的用户获得这些权限,请创建新的工作组信息文件,并指定工作组 ID (WID) ,这是在创建新的工作组信息文件时输入的区分大小写的字母数字字符串,长度为 4 到 20 个字符。 创建新工作组可唯一标识此工作组文件的管理员组。 只有知道 WID 的人才能创建工作组信息文件的副本。 若要创建新文件,请使用 User-Level 安全向导。
重要: 请务必记下确切的名称、组织和工作组 ID(包括字母是大写还是小写 (三个条目) ),并将它们保存在安全的位置。 如果必须重新创建工作组信息文件,则必须提供完全相同的名称、组织和工作组 ID。 如果忘记或丢失这些条目,可能会失去对数据库的访问权限。
权限的工作原理以及谁可以分配权限
用户级安全性可识别两种类型的权限:显式权限和隐式权限。 显式权限是直接授予用户帐户的权限;其他用户不受影响。 隐式权限是授予组帐户的权限。 将用户添加到该组会向该用户授予该组的权限;从组中删除用户会从该用户中删除该组的权限。
当用户尝试对采用安全功能的数据库对象执行操作时,该用户的权限集基于该用户的显式和隐式权限的交集。 用户的安全级别始终是该用户的显式权限以及该用户所属的任何和所有组的权限限制最少的。 因此,管理工作组最不复杂的方法是创建新组并将权限分配给组,而不是单个用户。 然后,可以通过在组中添加或删除这些用户来更改单个用户的权限。 此外,如果需要授予新权限,可以在单个操作中向组的所有成员授予这些权限。
可以通过以下方式更改数据库对象的权限:
-
创建数据库时正在使用的工作组信息文件的 Admins 组的成员。
-
对象的所有者。
-
对 对象具有“管理”权限的任何用户。
即使用户当前可能无法执行操作,他们也可能能够授予自己执行操作的权限。 如果用户是管理员组的成员,或者用户是对象的所有者,则此情况也是如此。
创建表、查询、窗体、报表或宏的用户是该对象的所有者。 此外,可以更改数据库中权限的用户组也可以更改这些对象的所有权,或者他们可以重新创建这些对象,这两者都是更改对象所有权的方法。 若要重新创建对象,可以创建对象的副本,也可以从另一个数据库导入该对象或将其导出到另一个数据库。 这是转移对象(包括数据库本身)所有权的最简单方法。
注意: 复制、导入或导出不会更改其 RunPermissions 属性设置为 “所有者”的查询的所有权。 仅当查询的 RunPermissions 属性设置为 User 时,才能更改查询的所有权。
安全帐户
Access 2003 工作组信息文件包含以下预定义帐户。
帐户 |
函数 |
管理员 |
默认用户帐户。 对于使用 Microsoft Jet 数据库引擎(如 Visual Basic for Applications (VBA) 和 Microsoft Office Excel 2003)的每个 Access 副本和其他程序,此帐户完全相同。 |
管理员 |
管理员的组帐户。 此帐户对于每个工作组信息文件都是唯一的。 默认情况下,管理员用户是管理员组的成员。 管理员组中必须始终保持至少一个用户。 |
用户 |
包含所有用户帐户的组帐户。 当管理员组的成员创建用户帐户时,Access 会自动将用户帐户添加到用户组。 此帐户对于任何工作组信息文件都是相同的,但它仅包含由该工作组的管理员组成员创建的用户帐户。 默认情况下,此帐户对所有新创建的对象具有完全权限。 从用户组中删除用户帐户的唯一方法是让管理员组的成员删除该用户。 |
实际上,Access 2003 和更早版本中的安全性始终处于活动状态。 在激活工作组的登录过程之前,Access 在启动时使用默认的 管理员 用户帐户,在启动时以无形方式登录所有用户。 在后台,Access 使用 管理员 帐户作为工作组的管理员帐户。 除了所有者 (组或用户) 创建的任何数据库和表、查询、窗体、报表和宏之外,Access 还使用 管理员 帐户。
管理员和所有者非常重要,因为他们具有无法获取的权限:
-
管理员 (管理员组的成员) 始终可以获取在工作组中创建的对象的完整权限。
-
拥有表、查询、窗体、报表或宏的帐户始终可以获取该对象的完全权限。
-
拥有数据库的帐户始终可以打开该数据库。
由于每个 Access 副本管理员用户帐户完全相同,因此帮助保护数据库的第一步是 (定义管理员和所有者用户帐户,或使用单个用户帐户作为管理员和所有者帐户) ,然后从管理员组中删除管理员用户帐户。 否则,具有 Access 副本的任何人都可以使用 管理员 帐户登录到工作组,并对该工作组的表、查询、窗体、报表和宏拥有完全权限。
可以将任意数量的用户帐户分配给管理员组,但只有一个用户帐户可以拥有该数据库 -- 拥有帐户是创建数据库时处于活动状态的用户帐户,或者通过创建新数据库并将数据库的所有对象导入到该数据库来转移所有权时处于活动状态的用户帐户。 但是,组帐户可以在数据库中拥有表、查询、窗体、报表和宏。
组织安全帐户时的注意事项
-
只有用户帐户才能登录到 Access;无法使用组帐户登录。
-
为数据库用户创建的帐户必须存储在工作组信息文件中,这些用户在使用数据库时将加入该文件。 如果使用其他文件创建数据库,请在创建帐户之前更改该文件。
-
请确保为管理员和用户帐户创建唯一密码。 可以使用管理员帐户登录的用户始终可以获取工作组中创建的任何表、查询、窗体、报表和宏的完全权限。 可以使用所有者帐户登录的用户始终可以获取该用户拥有的这些对象的完整权限。
创建用户和组帐户后,可以查看和打印它们之间的关系。 Access 打印工作组中帐户的报告,其中显示了每个用户所属的组以及属于每个组的用户。
注意: 如果使用使用 Microsoft Access 2.0 创建的工作组信息文件,则必须以管理员组的成员身份登录才能打印用户和组信息。 如果工作组信息文件是使用 Microsoft Access 97 或更高版本创建的,则工作组中的所有用户可以打印用户和组信息。
设置用户级别安全性
本部分中的步骤说明如何启动和运行 User-Level 安全向导。 请记住,这些步骤仅适用于在 Access 2007 或更高版本中打开的 Access 2003 或更低文件格式的数据库。
重要: 在 Access 2007 或更高版本中,如果使用 User-Level 安全向导指定默认工作组信息文件,则启动 Access 时,还必须使用 /WRKGP 命令行开关指向工作组信息文件。 有关将命令行开关与 Access 配合使用的详细信息,请参阅 Microsoft Office 产品的命令行开关一文。
启动 User-Level 安全向导
-
打开要管理的 .mdb 或 .mde 文件。
-
在“ 数据库工具 ”选项卡上的“ 管理 ”组中,单击“ 用户和权限”下面的箭头,然后单击“ 用户级别安全向导”。
-
按照每个页面上的步骤完成向导。
注意:
-
User-Level 安全向导创建具有相同名称和.bak文件扩展名的当前 Access 数据库的备份副本,然后对当前数据库中的选定对象采用安全措施。
-
如果当前 Access 数据库使用密码帮助保护 VBA 代码,向导会提示你输入密码,你必须输入该密码才能使向导成功完成其操作。
-
通过向导创建的任何密码都打印在 User-Level 安全向导报表中,使用完向导后会打印该报表。 应将此报表保存在安全位置。 如果工作组文件丢失或损坏,可以使用此报表重新创建该文件。
-
删除用户级安全性
若要在 Access 2007 或更高版本中工作时删除用户级安全性,请将 .mdb 文件另存为 .accdb 文件。
在 中保存文件的副本。ACCDB 格式
-
单击“文件”选项卡。 此时将打开 Backstage 视图。
-
在左侧,单击“ 共享”。
-
在右侧,单击“ 将数据库另存为”,然后单击“ 访问数据库” (*.accdb) 。
将显示“另存为”对话框。
-
使用 “保存位置” 列表查找要在其中保存转换的数据库的位置。
-
在 “保存类型 ”列表中,选择“ Access 2007-2016 Database (*.accdb) ”。
-
单击“保存”。
注意: 如果使用 Access 2007,请单击 Microsoft Office 按钮 ,然后单击“ 转换 ”,打开“ 保存位置 ”对话框,将数据库保存到 。ACCDB 文件格式。
对象权限参考
下表列出了可为数据库和数据库中的对象设置的权限,并描述了使用每个权限设置的效果或结果。
权限 |
适用于这些对象 |
结果 |
打开/运行 |
整个数据库、窗体、报表、宏 |
用户可以打开或运行 对象,包括代码模块中的过程。 |
以独占方式打开 |
整个数据库 |
用户可以打开数据库并锁定其他用户。 |
读取设计 |
表、查询、窗体、宏、代码模块 |
用户可以在“设计”视图中打开列出的对象。 注意: 每当通过分配其他权限(例如读取数据或更新数据)授予对表或查询中的数据的访问权限时,您也会授予“读取设计”权限,因为设计必须可见才能正确呈现和查看数据。 |
修改设计 |
表、查询、窗体、宏、代码模块 |
用户可以更改所列对象的设计。 |
管理 |
整个数据库、表、查询、窗体、宏、代码模块 |
用户可向列出的对象分配权限,即使用户或组不拥有该对象也是如此。 |
读取数据 |
表、查询 |
用户可以读取表或查询中的数据。 若要向用户授予读取查询的权限,还必须授予这些用户读取父表或查询的权限。 此设置意味着“读取设计”权限,这意味着除了数据之外,用户还可以读取表或查询设计。 |
更新数据 |
表、查询 |
用户可以更新表或查询中的数据。 用户必须有权更新父表或查询。 此设置意味着“读取设计”和“读取数据”权限。 |
插入数据 |
表、查询 |
用户可以将数据插入表或查询。 对于查询,用户必须具有将数据插入父表或父查询的权限。 此设置意味着“读取数据”和“读取设计”权限。 |
删除数据 |
表、查询 |
用户可以从表或查询中删除数据。 对于查询,用户必须有权从父表或查询中删除数据。 此设置意味着“读取数据”和“读取设计”权限。 |