VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 用VB5访问具有用户级安全的Access 97数据库
发表评论(0)作者:, 平台:, 阅读:14175, 日期:2000-03-12
用VB5访问具有用户级安全的Access 97数据库

中国人民武装警察部队学院信息工程室--马民--张丽艳(计算中心)





作 为Office 97 专 业 版 的 重 要 组 件,Access 97 是 开 发 中 小 型

关 系 数 据 库 系 统 的 最 强 大 平 台 之 一。 在 数 据 库 安 全 方 面,

Access 97 提 供 了 类 似 网 络 中 使 用 的 方 法: 设 置 用 户 级 安 全,

它 要 求 用 户 在 启 动 数 据 库 引 擎 时 需 确 认 自 己 的 身 份 并 键

入 密 码; 并 只 能 按 规 定 的 权 限 使 用 数 据 库 中 的 对 象, 从 而

有 效 地 保 护 了 数 据 库 中 的 敏 感 数 据。


VB5 程 序 员 可 以 通 过DAO( 数 据 访 问 对 象) 方 法 使 用 与 驱

动Access 97 相 同 的Microsoft Jet 数 据 库 引 擎V3 ?5, 但 可 能 出 于

技 术 和 策 略 上 的 考 虑,VB5 并 不 能 象Access 97 那 样 可 以 创 建

一 个 用 户 级 安 全 的 数 据 库: 即 它 无 法 创 建 工 作 组 信 息 文

件.MDW( 数 据 库)。 然 而, 对 于 一 个 现 存 的 具 有 用 户 级 安 全 的

Access 数 据 库, 用VB5 可 以 直 接 编 程 来 控 制 它 的 安 全 设 置,

包 括 创 始 新 的 用 户 和 组 帐 户, 设 置 口 令 和 对 数 据 库 中 单

个 对 象( 如 表 或 查 询 对 象) 的 访 问 权 限 等。


因 此, 如 果 要 通 过VB5 代 码 来 使 用 一 个 安 全 的 数 据 库,

可 以


用Access 97 创 建 一 个 用 户 级 安 全 的 数 据 库


用VB5 代 码 来 访 问 此 用 户 级 安 全 的 数 据 库

下 面 先 简 要 介 绍 一 下Access 创 建 用 户 级 安 全 方 法, 再 以

一 个 实 例 来 着 重 说 明 如 何 用VB5 的DAO 方 法 来 访 问 具 有 用 户

级 安 全 的Access 数 据 库。


一、 用Access 97 创 建 一 个 用 户 级 安 全 的 数 据 库

1.用 工 作 组 管 理 器 创 建 一 个 新 的 工 作 组 信 息 文 件, 并

连 接 于Access;


2.启 动Access, 规 划 并 建 立 组 和 用 户 帐 户;


3.打 开 或 新 建 好 相 应 的 数 据 库.mdb, 然 后 使 用 用 户 级 安

全 性 向 导 生 成 安 全 数 据 库;


4.打 开 生 成 的 安 全 数 据 库, 指 定 组 或 用 户 帐 户 对 数 据

库 中 单 个 对 象 的 权 限;


5.关 闭 安 全 数 据 库。


为 执 行 上 述 步 骤, 一 般 要 有 管 理 员 组 成 员 的 权 限, 具

体 方 法 可 参 见Access 97 的 在 线 帮 助。


二、 用VB5 代 码 来 访 问 此 用 户 级 安 全 的 数 据 库

DAO 模 型 是 数 据 库Jet 引 擎 的 面 向 对 象 的 接 口, 因 此, 只

要 了 解 与 数 据 库 安 全 体 系 相 关 的DAO 类 分 层 结 构( 见 图1) 及

DAO 类 集 合 与Access 安 全 的 对 应 关 系( 见 表1), 再 有 面 向 对 象

和VB 的 编 程 经 验 的 话, 用VB5 代 码 访 问Access 安 全 数 据 库 简 单

方 便。


下 面 以 一 个 实 例 程 序 具 体 说 明 之:


Private Sub Form —Load()


′ 设 置 连 接 的 工 作 组 信 息 文 件;


′ 也 可 使 用GetSetting 语 句 从 注 册 表 中 应 用 程 序 部 分 读




DBEngine.SystemDB= ″E:\PWin95\System\MaMin.mdw ″

′ 设 置 缺 省 工 作 台WokdSpaces(0) 的 登 录ID 和 口 令

′ 实 际 编 程 时 安 全 的 方 法 是 由 用 户 输 入 这 些 值

′ 注 意:MM 为 管 理 员 组 成 员, 才 有 权 限 执 行 下 面

′       创 建 新 用 户 和 查 询 组 帐 户 及 用 户 帐 户 的 操 作

DBEngine.DefaultUser= ″MM ″

DBEngine.DefaultPassword= ″1225 ″

′ 定 义 对 象 变 量

Dim dbMm As Database,wsMm As Workspace

Dim ctrMm As Container,docMm As Document

Dim grpMm As Group,grpTemp As Group,usrMm As User

Dim NewUser As String

NewUser= ″ 新 成 员 ″         ′ 欲 新 建 用 户 的 帐 户

′ 使 用 缺 省 工 作 台

Set wsMm=DBengine.Workspaces(0)

′ 以 下 使 用VB5 的DAO 类 集 合 中 的Users 和Groups

′ 对 应 于 用 户、 组 帐 户 和 口 令

′ - - - - - - - - - - - - - - - - - - - - - -

′ 若 新 用 户 已 存 在, 则 删 除 之

For Each usrMm In wsMm.Users ′ 在Users 集 合 中 查 找

 With usrMm

   If.Name=NewUser Then     ′ 若 存 在

     wsMm.Users.Delete.Name ′ 删 除 之

     wsMm.Groups.Refresh     ′ 更 新Groups 集 合

   End If

 End With

Next

′ 建 立 新 用 户,PID=M186,Password= ″Mpass ″

Set usrMm=wsMm.CreateUser(NewUser, ″M186 ″, ″Mpass ″)

wsMm.Users.Append usrMm     ′ 追 加 到Users 集 合

wsMm.Groups.Refresh         ′ 更 新Groups 集 合

′ 将 新 用 户 添 加 到“ 通 用 组” 中

′ 注 意: 在Groups 集 合 中 应 存 在 该 组

Set grpTemp=usrMm.CreateGroup( ″ 通 用 组 ″)

usrMm.Groups.Append grpTemp

wsMm.Users(NewUser).Groups.Refresh

′ 列 出 所 有 的 组 帐 户 及 其 下 的 用 户 帐 户

For Each grpMm In wsMm.Groups

 With grpMm

   Debug.Print ″ 组 名: ″ &.Name

   For Each usrMm In.Users

     Debug.Print ″ 成 员: ″ & usrMm.Name

   Next

 End With

Next

′ - - - - - - - - - - - - - - -

′ 用 新 建 用 户 登 录 到 新 建 的 工 作 台Workspaces( ″NewWs ″) 上

Set wsMm=DBEngine.CreateWorkspace( ″NewWs ″,NewUser, ″Mpass ″)

′ 打 开 已 存 在 的 具 有 用 户 级 安 全 的Access 数 据 库

Set dbMm=wsMm.OpenDatabase( ″M:\My Documents\ 安 全Papers.mdb ″)

′ 以 下 使 用VB5 的DAO 类 集 合 中 的Containers 和Documents

′ 对 应 于 数 据 库 中 单 个 对 象, 如 表 对 象 和 查 询 对 象 等

′ - - - - - - - - - - - - - - -

For Each ctrMm In dbMm.Containers

 With ctrMm

    ′ 只 列 出 表 对 象 和 查 询 对 象

   If.Name= ″Tables ″Then

     Debug.Print ″ 容 器: ″ &.Name

     Debug.Print ″ 用 户: ″ &.UserName

      ′ 直 接 权 限 指 直 接 赋 予 帐 户 的 权 限

      ′ 有 效 权 限 则 包 含 从 父 容 器 和 组 帐 户 继 承 的 权 限

     Debug.Print ″   直 接 权 限: ″ &.Permissions

     Debug.Print ″   有 效 权 限: ″ &.AllPermissions

     For Each docMm In ctrMm.Documents

       With docMm

          ′ 忽 略 查 阅 等 生 成 的 查 询 对 象

         IfNot(.Name Like ″M * ″ Or —

             .Name Like ″ ~ * ″)Then

         Debug.Print ″ 文 档: ″ &.Name

         Debug.Print ″ 用 户: ″ &.UserName

         Debug.Print ″ 直 接 权 限: ″ &.Permissions

         Debug.Print ″ 有 效 权 限: ″ &.AllPermissions

         End If

       End With

     Next

   End If

 End With

Next

′ - - - - - - - - - - - - - - - - -

′ 关 闭 数 据 库

dbMm.Close

Unload Me ′ 不 显 示 窗 体 退 出

End Sub

运 行 程 序,“ 立 即 窗 口” 显 示 如 下( 为 方 便 查 看, 进 行 了 分

栏 排 版)

组 名:Admins       组 名: 通 用 组       组 名:Users

成 员:mm       成 员: 新 成 员       成 员:admin

               成 员:mamin     成 员:mamin

                                成 员:mm

容 器:Tables

用 户: 新 成 员

直 接 权 限:0

有 效 权 限:0

文 档: 按 论 文 查 询     文 档: 按 杂 志 查 询     文 档: 查 询

交 叉 表

用 户: 新 成 员        用 户: 新 成 员         用 户: 新 成



直 接 权 限:0       直 接 权 限:0       直 接 权 限:0

有 效 权 限:20       有 效 权 限:20       有 效 权 限:0


文 档: 论 文           文 档: 投 稿 情 况       文 档: 杂 志

用 户: 新 成 员 用 户: 新 成 员 用 户: 新 成



直 接 权 限:0 直 接 权 限:0 直 接 权 限:0

有 效 权 限:20 有 效 权 限:244 有 效 权限:20


我 们 看 到, 管 理 员 组Admins仅 有 一 个 用 户mm(非admin), 这 是

一 个 较 完 全 的 帐 户 规 划;“ 新 成 员” 已 被 添 加 到 期 望 的“

通 用 组” 中。 另 外, 如 果 要 完 全 符 合Access97的 帐 户 要 求, 还

应 将 新 建 用 户 添 加 到Users( 用 户 组) 中。


对Access数 据 库 中 的 六 类 对 象: 表、 查 询、 窗口 体、 报 表、

宏 和 模 块。VB5只 需 访 问 表 和 查 询 对 象, 对 另 四 类 对 象,VB5代

码 本 身 提 供 了 更 强 大 的 功 能。 此 安 全 数 据 库 中 表 对 象 有:

论 文、 杂 志 和 投 稿 情 况; 查 询 对 象 有: 按 论 文 查 询、 按 杂

志 查 询 和 查 询 交 叉 表。 由 于 新 建 用 户 时 并 没 有 赋 予 其 权

限, 故 其 对 数 据 库 中 对 象 的 直 接 权 限 都 为0( 无 权 访 问,

dbSecNoAccess), 其 有 铲 权 限 都 是 从“ 通 用 组” 帐 户 中 继 承 来

的, 这 也 是 一 种 设 置 权 限 的 常 用 方 法。


若 要 改 变 用 户 访 问 对 象 的 权 限, 只 需 以 管 理 员 组 成 员

或 对 象 所 有 者 的 身 份 登 录, 指 定 对 象 的UnserName和Permissions

属 性 即 可。


总 之,VB5为 访 问 具 有 用 户 级 安 全 的Access 97数 据 库 提 供

了 全 面 的 编 程 级 的DAO方 法。


注: 此 实 例 在 中 文Windows NT Workstation 4.0上 中 文 企 业 版VB

5.0( 访 问 中 文Access 97创 建 的 安 全 数 据 库) 环 境 下 运 行 通 过。