发表评论(0)作者:, 平台:, 阅读:14603, 日期: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创 建 的 安 全 数 据 库) 环 境 下 运 行 通 过。
中国人民武装警察部队学院信息工程室--马民--张丽艳(计算中心)
作 为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创 建 的 安 全 数 据 库) 环 境 下 运 行 通 过。