Select the product you need help with
信息: 如何 Visual Basic 3.0 Handles 安全设置 Microsoft access文章编号: 105990 - 查看本文应用于的产品 本页概要Visual Basic 3.0 版包括 Microsoft Access 数据库引擎。 Visual Basic 包含语法,使操作在 Microsoft Access 可以几乎每个方法的 Microsoft Access 数据库。一个主要的例外情况是安全的区域中。只有 Microsoft Access 可以设置或修改 (如登录 id 和密码的系统) 的安全选项和设置或修改某个特定数据库中的特定对象上的权限。 Visual Basic 3.0 版不会包含两个语句 (SetDataAccessOption 和 SetDefaultWorkspace) 可以满足安全机制的 Visual Basic 应用程序的 Microsoft Access 实现并使用 Visual Basic 代码登录。通过这些语句可以获得所授予特定用户的权限。 本文介绍了适用于 3.0 版 Visual Basic 和 Visual Basic 程序员的 Microsoft Access 安全机制。超出了本文的范围是整个安全功能的 Microsoft Access。 有关 Microsoft Access 的安全功能的完整说明,请参阅以下知识库文章: 122036
(http://support.microsoft.com/kb/122036/EN-US/
)
WX1051: 安全机制向导并白皮书应用程序说明 2.0 更多信息Microsoft Access 安全被实现两个部分:
每个用户和组具有唯一的安全标识号 (SID)Microsoft Access 在每个用户和组都有一个安全 ID (SID)。SID 是唯一地标识用户或组的二进制字符串。当用户登录时,是否从登录对话框,在 Microsoft Access 或 Visual Basic (下文所示) 中的代码,Microsoft Access 引擎读取 MSysAccounts SYSTEM.MDA 数据库的表中。此数据库只由 Microsoft Access 创建,如果删除原始副本,则将创建新的 (空) 一个。注意: 如果被意外删除原始 SYSTEM.MDA,则所有唯一的 sid 将丢失。因此,所有能够访问受保护的数据库都将也会丢失。因此,它是一个不错的主意时在数据库上设置权限,已备份数据库和就地 SYSTEM.MDA 文件。 在登录时, 用户所提供的 (不区分大小写) 的用户名和密码 (区分大小写)。如果用户名和密码是正确的用户的 SID 检索并保存在该引擎的内部结构。密码只用于验证用户。从上的此点后该用户成为已验证的用户密码包含安全毫无作用。 下面是一个关键点与 Visual Basic 行为相关的。默认状态下,Microsoft Access 引擎将尝试验证用户和管理员的密码和""分别。Visual Basic 3.0 版将而任何的代码不发送此键组合到 Microsoft Access 引擎默认情况下。这意味着,即使不使用 Visual Basic 与安全相关语句,Visual Basic 程序将获得到在的数据库的许可如果"管理员"组管理员的用户没有从默认的无更改其密码 ("")。 一旦登录,检索用户的 SID。此 SID 用于 Microsoft Access 引擎中的所有后续操作。 该 SID 的 SYSTEM.MDA 数据库中存储SID 存储在数据库自身中。因此,授予特定用户或组的所有权限也都存储在该数据库与唯一的 SID 相关联。这样会打开 Visual Basic 的行为与相关的另一个关键点。在 Visual Basic 程序将进入到数据库,并让 seeming 忽略 Microsoft Access 安全机制,如果下列任一情况为真时的完全权限:
在 Microsoft Access 对象类型列表是: 表、 查询、 窗体、 报表、 宏,和模块。这些,只有前两个是从 Visual Basic 代码可以访问,以便在其他人可以省略从以下说明。 下面的两个部分说明了这两个的每个与 Visual Basic 安全相关语句 (SetDataAccessOption 和 SetDefaultWorkspace)。两个语句为了提供一种 SYSTEM.MDA 文件,Microsoft access 设置登录到一个 Microsoft Access 数据库安全性的项。以下这些两个的几节是相关的 Microsoft Access 引擎与安全相关行为,两个语句的部分。 SetDataAccessOption 语句--语法和行为SetDataAccessOption 具有以下参数:SetDataAccessOption option, value option is a numeric value with only one legal value (1). 例如: 在 \VB 目录的根提供 DATACONS.TXT 文件中, 为此值定义一个常量: SetDataAccessOption 设置名称和您的应用程序的初始化 (.ini) 文件的路径。只有当 SetDataAccessOption 用在数据访问功能则加载和初始化之前时,应用程序的.ini 文件生效。一旦在初始化数据访问不能更改此设置不先退出应用程序的情况下。值是一个字符串表达式。对于 DB_OPTIONINIPATH 选项值参数包含一个字符串表达式,它提供的路径和您的应用程序的初始化 (.ini) 文件的名称。初始化文件通常存储在用户的 \WINDOWS 目录,并与可执行文件,但.ini 扩展名为具有相同的名称。只有在您的应用程序的初始化文件不同的名称或 \WINDOWS 目录以外的目录中,请使用此语句。 如果 VB.INI 文件 (在 \WINDOWS 目录中) 包含下列行 VB.EXE 环境中运行 vba 项目时,则不需要 SetDataAccessOption 语句: [选项] SystemDB=T:\ACCESS\SYSTEM.MDA UtilityDB=T:\ACCESS\UTILITY.MDA 注: 在 SYSTEM.MDA 的实际位置并不重要前提是 Microsoft Access 和 Visual Basic 具有指向它们将共享该 SYSTEM.MDA 一个条目。如果应用程序的.exe 文件都有其自己的.ini 文件中该 \WINDOWS 和.exe 和.ini 文件共享相同的名称,则不需要 SetDataAccessOption 语句。 SetDefaultWorkspace 语句--语法和行为SetDefaultWorkspace 具有以下参数:SetDefaultWorkspace username, password 如果此语句留,Visual Basic 将发送到 Microsoft Access 数据库引擎中包括的 Visual Basic 的等效于下面的行: SetDefaultWorkspace "Admin" , "" 此语句获取一个有效的 SID 和获得项以在数据库中的所有表和查询对象的效果。 Visual Basic 和 Microsoft Access 安全之间的关系若要了解 Visual Basic 和 Microsoft Access 的安全关系,您必须了解 Access 的安全机制。 这里有没有广泛使用 Microsoft Access 在 Visual Basic 程序员的利益的详细的说明。没有权限在 Microsoft Access 中的层次结构。最高级别有组。包含在特定的组是用户。若要向权限向特定用户中有选择地授予所有权限必须首先取消选择或从用户组中删除。然后,并只然后,可以权限授予或废除对单个用户。列出单个的用户的权限被称为显式权限。 设置为包含在用户帐户组的权限,称为隐式的权限。隐式权限优先于显式权限。 您可以使用安全菜单已打开数据库,并在用户登录后,在 Microsoft Access 设置权限。从安全菜单选择上的 Visual Basic 中意味着表和查询对象在数据库中的每个对象指派权限的权限。 例如对于组是否在 Microsoft Access 数据库名为包含用户王俊元和 Sue 分析员和想要只限制王俊元向读取数据并授予控告的完全权限,请按照下列步骤:
下面是为了说明 Visual Basic 和 Microsoft Access 安全之间关系的几种方案: 方案一: 在这种情况下 SYSTEM.MDA 文件的位置没有引用。Windows 和 Microsoft Access 引擎不能使用本文中前面列出的 [选项] 部分中找到.ini 文件。 因此,该 SYSTEM.MDA 将被忽略并且 Visual Basic 将默认为其默认用户和密码组合 ("管理员""")。但是,以前,默认用户管理员的密码已更改为其他以外的其他""。此外,组管理员和用户管理管理员组中吊销的所有权限。因此,则 Visual Basic 出现下列错误在点 2: Couldn't read; no read permission for table or query 'f)) 您已经关闭 vba 并试图绕过 SYSTEM.MDA 文件中的登录任何 Visual Basic 应用程序的后门。 方案 2: 在这种情况下,而无需任何指针 SYSTEM.MDA 文件调用 SetDefaultWorkspace 语句,因为 Visual Basic Microsoft Access 引擎 hunts SYSTEM.MDA 文件的和,不查找它,时在代码中的点 0 发出了以下错误: 找不到文件 SYSTEM.MDA 注: 在一个和第二个都相同,就可能出现如果 SYSTEM.MDA 已将文件移,这两种方案中发生的错误重命名,或删除。 方案 3: 在这种情况下您告诉 Visual Basic Microsoft Access 引擎 SYSTEM.MDA 文件所在但不提供用户和密码组合。因此,再次,Visual Basic 提供它知道,只有用户和密码组合 ("管理员"""),这是不能再一个有效组合的因为您添加到管理用户帐户的密码。如此一来 Visual Basic 在代码中的点 1 提供了以下错误: 不是有效的帐户或密码。 方案四: 在这种情况下,提供两个参数正确。 因此,因为为 Bob"读取数据"权限,以及允许 Visual Basic Microsoft Access 的"读取定义"引擎读取,Visual Basic 应用程序将打印在第一个记录中,表名为 TestTbl 的前两个字段。 如果您重复与用户控告四个的情况下,所有将是相同的。但是,Sue,可以继续,修改表结构和数据以及。切记首先选择组分析师和吊销的所有权限。然后您将添加回所有权限到 Sue,但只有读取数据和读取定义都添加到王俊元。 注: 管理员组有与安全相关的特殊的意义。 这适用于该组中的任何用户。创建数据库时,管理员组的 SID 存储在该 SYSTEM.MDA。如此一来,管理员组将始终具有更改该数据库中的所有对象权限的权限。此权限不能立即采取的任何人。甚至在所有权限已被都吊销,管理员组中且不将其显示在权限对话框中时,仍保留此权限。这是保留一个备份并跟踪的 SYSTEM.MDA 已在使用时创建数据库的另一个原因。 使用 SQL 查询中的 OwnerAccess 选项一个可能的混淆的最后一个点紧紧围绕以下短语在 SQL 查询中的使用着以下几点: ... With OwnerAccess Option 例如对于查看此代码: 此代码会导致此错误: 无效的数据库 id。 这是因为 OwnerAccess 指的是数据库的所有者。所有者是数据库的创建者。也就 OwnerAccess 指的是所有者的用户和密码组合 (唯一的 SID) 存储在数据库中 (在这种情况下 BD1.MDB)。但是,代码不包含指向 SYSTEM.MDA 文件的受保护的数据库所需的两个语句。实际上,在这种情况下只有 SetDefaultWorkspace 语句是非常重要,如果将已编译的.exe 文件的.ini 文件包含一个有效的 [选项] 部分 \WINDOWS 目录中。 该代码使用后门程序。它已不提供唯一的 SID 的数据库所有者到引擎,以便引擎并不知道默认名称和密码组合 (管理员,"") 的用户是数据库所有者。 即使证明用户管理是不具有读取 SYSTEM.MDA 文件的情况下在数据库所有者引擎无法验证该这一事实,所以,它使该错误。 2.0 版的 Microsoft Access 的用户的备注使用在最近发行的 Microsoft Jet 2.0/视频基本 3.0 兼容性层 Visual Basic 可以获得对 Microsoft Access 版本 2.0 数据库的访问。下面是一些说明以帮助您将安全版本 1.1 数据库转换为 Microsoft Access 版本 2.0 中的格式。如果版本 1.x 数据库安全,会保持安全是否使用 Microsoft Access 版本 1.x 或 2.0 中打开它。但是,Microsoft Access 版本 2.0 中不能用于更改或添加数据库中的权限由管理员,甚至直到在数据库转换到版本 2.0。 安装了 Microsoft Access 版本 2.0 时创建其自己的工作组文件 (SYSTEM.MDA)。如果在 1.x 版本所在的同一目录中安装了 Microsoft Access 版本 2.0,版本 1.x SYSTEM.MDA 文件将重命名 SYSTEM1X.MDA。 若要对已转换的数据库的安全性所做的更改,您必须使用版本 2.0 具有相同的组和用户 (以及相同的 pid) 作为原始 SYSTEM.MDA SYSTEM.MDA。 注: 在 Microsoft Access 版本 2.0 中的 pid (个人 id) 是等价的 pin (个人 ID 值) 在 1.x 版本中 创建安全工作组:
注: 在一个安全工作组只有具有修改设计权限的所有对象的用户才可以将转换版本 1.x 格式为 2.0 版格式。 此外,您必须将修改设计权限分配给 Microsoft Access 1.x 版本使用版本 1.x 工作组中的版本 1.x 数据库。
要记住的要点
属性文章编号: 105990 - 最后修改: 2003年10月28日 - 修订: 2.0 这篇文章中的信息适用于:
机器翻译 注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。 点击这里察看该文章的英文版: 105990
(http://support.microsoft.com/kb/105990/en-us/
)
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。 |





回到顶端








