信息: 如何 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 的安全功能的完整说明,请参阅以下知识库文章:
122036WX1051: 安全机制向导并白皮书应用程序说明 2.0

更多信息

Microsoft Access 安全被实现两个部分:
  • 每个用户和组都有一个唯一的安全 ID (SID) 代码。
  • 该 SID 代码存储在一起相关联的权限,该 SID 的数据库中。
下两节提供详细信息。

每个用户和组具有唯一的安全标识号 (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 安全机制,如果下列任一情况为真时的完全权限:
  • Visual Basic 程序员不具有执行该 SYSTEM.MDA 的位置在程序代码中考虑到的数据库。
  • "管理员"用户未从默认的无更改其密码 ("")。
这是由于对 Microsoft Access 引擎和 Visual Basic 的默认行为。组合的效果是通过 Visual Basic 代码中允许输入到数据库和它的对象。

在 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).
				

例如:
   SetDataAccessOption 1, "E:\VBPROJ\MY.INI"
				

在 \VB 目录的根提供 DATACONS.TXT 文件中, 为此值定义一个常量:
   Global Const DB_OPTIONINIPATH = 1
				

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 分析员和想要只限制王俊元向读取数据并授予控告的完全权限,请按照下列步骤:
  1. 登录到 Microsoft Access 以管理员组中的用户。例如对于输入管理员或 Fred。
  2. 从安全菜单选择权限 (ALT S P)。
  3. 表的对象是默认的类型。选择要为其设置权限的表的名称。例如对于选择 TestTbl。
  4. 将用户/组框架中的选项设置为组中。单击下的组合框列表,然后单击选择组分析员。
  5. 清除所有复选框,以撤消对整个组的所有权限。
  6. 返回到用户更改列表选项按钮并选择王俊元。清除所有王俊元的权限复选框。
  7. 从在列表中选择 Sue 并检查完全的权限复选框。
  8. 单击分配按钮所做的更改应用于表格。
此位置假定您有 Visual Basic 程序包含在窗体加载事件中下面的代码:
Sub Form_Load ()
   Dim db As database
   Dim ds As dynaset
   Dim scenario as integer

   scenario = 'insert a value between 1 and 4 here

   select case scenario
      case 1:
         ' Do nothing

      case 2:
         SetDefaultWorkspace "bob", "leftout"

      case 3:
         SetDataAccessOption 1, "E:\VB.INI"    ' not in \WINDOWS directory

      case 4:
         SetDataAccessOption 1, "E:\VB.INI"    ' not in \WINDOWS directory
         SetDefaultWorkspace "bob", "leftout"
   end select

   Set db = OpenDatabase("E:\DATACON\BASES\ACCESS11\ASAMPLE.MDB") ' point 1
   Set ds = db.CreateDynaset("TestTbl")                           ' point 2

   autoredraw = True   ' to make Print  statement persist on the form
   Print ds(0), ds(1)

End Sub
				

下面是为了说明 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
				

例如对于查看此代码:
   Sub Form_Load ()
      Dim db As Database
      Dim qd As querydef

      Set db = OpenDatabase("C:\ACCESS\DB1.MDB")

      ' Enter the following two lines of code as one, single line:

      Set qd = db.CreateQueryDef("myQD", "select * from [TableDetails]
         with owneraccess option ;")
      db.Close
   End Sub
				

此代码会导致此错误:
无效的数据库 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. 使用 2.0 工作组管理员工具来创建一个新的工作组。 这是版本 2.0 SYSTEM.MDA 文件。
  2. 重新创建所有用户和组帐户使用相同的名称和 PID Microsoft Access 1.x 版本中所使用的数字。
若要转换为 2.0 版格式的一个安全 1.x 数据库:

注: 在一个安全工作组只有具有修改设计权限的所有对象的用户才可以将转换版本 1.x 格式为 2.0 版格式。 此外,您必须将修改设计权限分配给 Microsoft Access 1.x 版本使用版本 1.x 工作组中的版本 1.x 数据库。
  1. 请确保没有人使用版本 1.x 数据库。
  2. 作为管理员组的成员不是管理员用户登录到 Microsoft Access 2.0 中。
  3. 从文件菜单中选择转换数据库命令。
  4. 选择要转换的 1.x 版本数据库。系统将提示您为版本 2.0 版数据库名称。

    注意: 转换数据库命令将强制您选择一个新数据库的名称。这样,一旦您已从 1.x 版本一数据库转换到版本 2.0 将不将其转换回为 1.x 版本为保留您的版本 1.x 数据库的备份副本。
  5. 具有您加入到新的 2.0 版工作组 (SYSTEM.MDA) 中,方法是使用工作组管理员工具的用户。

    注意: 您可以还通过实现此目的修改 MSACC20.INI 文件在您的 Windows 目录中。文件的 [选项] 中更改点到版本 2.0 SYSTEM.MDA SystemDB 项文件。文件的 [选项] 部分将类似于下面的示例:
          [Options]
          SystemDB=<microsoft access path>\SYSTEM.MDA
    
    						

要记住的要点

  1. 只有 Microsoft Access 可以创建和修改 SYSTEM.MDA 文件。
  2. SYSTEM.MDA 文件中包含唯一的 SID 具有权限的数据库中用于排序出谁是谁的 Microsoft Access 引擎强制执行那些权限。该 SID 获得通过提供与有效的用户和密码组合的 Microsoft Access 引擎从它获得唯一的 SID 引擎存储在内存中来强制一个打开的数据库的安全。
  3. Microsoft Access 和 Visual Basic 需要指向以获得要具有安全性和权限实现数据库项关闭 SYSTEM.MDA 文件位置。
  4. 没有后门可用来在 Visual Basic 应用程序如果 (名为管理员) 的管理员组中的用户不是的默认的更改密码从默认的无 ("")。
  5. 如果 CreateQueryDef、 CreateDynaset 或 CreateSnapshot 方法的 SQL 查询中使用短语"随 OwnerAccess 选项中",则必须存在指向 SYSTEM.MDA 文件的指针。即使您使用的后门 (默认用户和密码组合的管理和"") 和似乎在 SQL 查询中使用"带 OwnerAccess 选项中"时需要 SYSTEM.MDA,该引擎必须请参阅 SYSTEM.MDA 文件,以匹配要登录的用户数据库的所有者 (创建者) 的 SID。
  6. 存储在 SYSTEM.MDA 文件中有效的登录用户和密码组合但权限将存储在数据库 (.mdb 文件) 本身。从该 SYSTEM.MDA 通过使用一个有效的用户和通过在 Microsoft Access 登录对话框或通过在 Visual Basic 代码对 Microsoft Access 引擎提供的密码组合中提取唯一键 (SID)。

属性

文章编号: 105990 - 最后修改: 2013年10月21日 - 修订: 2.0
这篇文章中的信息适用于:
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 3.0 Professional Edition
关键字:?
kbnosurvey kbarchive kbmt kbinfo KB105990 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 105990
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com