📄
字号:
作者:一面湖水
日期:2000-1-23 4:33:45
在ORACLE 中 利 用 角 色 增 强 应 用 系 统 安 全 性
厦 门 前 沿 科 技 开 发 有 限 公 司
刘 学 平
---- 数 据 安 全 性 是 指 保 护 数 据 以 防 止 非 法 的 使 用, 避 免 造 成 数 据 有 意 或 无 意 的 丢 失、 泄 露 或 破 坏。 由 于 数 据 库 系 统 中 集 中 存 放 有 大 量 的 数 据, 这 些 数 据 又 为 众 多 用 户 所 共 享, 所 以 安 全 约 束 是 一 个 极 为 突 出 的 问 题。
---- ORACLE 数 据 库 系 统 在 实 现 数 据 库 安 全 性 管 理 方 面 采 取 的 基 本 措 施 有:
通 过 验 证 用 户 名 称 和 口 令, 防 止 非ORACLE 用 户 注 册 到ORACLE 数 据 库, 对 数 据 库 进 行 非 法 存 取 操 作。
授 予 用 户 一 定 的 权 限, 例 如CONNECT,RESOURCE 等, 限 制 用 户 操 纵 数 据 库 的 权 力。
授 予 用 户 对 数 据 库 实 体( 如 表、 表 空 间、 过 程 等) 的 存 取 执 行 权 限, 阻 止 用 户 访 问 非 授 权 数 据。
提 供 数 据 库 实 体 存 取 审 计 机 制, 使 数 据 库 管 理 员 可 以 监 视 数 据 库 中 数 据 的 存 取 情 况 和 系 统 资 源 的 使 用 情 况。
采 用 视 图 机 制, 限 制 存 取 基 表 的 行 和 列 集 合。
---- 在 实 际 应 用 中, 许 多 系 统 往 往 采 用 假 用 户( 即 非 数 据 库 用 户) 身 份 来 管 理, 而 真 实 用 户 的 身 份 和 登 录 口 令 就 隐 藏 在 应 用 系 统 中, 或 经 过 各 种 压 缩 加 密 等 处 理 的 配 置 文 件 中。 但 这 样 往 往 留 下 隐 患, 只 要 从 分 析 应 用 程 序 入 手, 最 终 会 分 析 出 系 统 使 用 的 数 据 库 用 户 和 口 令, 那 么 其 安 全 性 也 就 消 失 了。 另 一 方 面, 系 统 代 码 是 程 序 员 写 出 来 的, 如 果 程 序 员 有 破 坏 意 图, 这 种 模 式 没 有 一 丝 的 安 全, 因 为 他 通 过 自 己 掌 握 的 代 码 不 经 分 析 就 轻 而 易 举 的 获 得 登 录 用 的 数 据 库 用 户 和 口 令。
---- 而 采 用 真 实 数 据 库 用 户, 存 在 着 权 限 分 配 上 的 难 度, 特 别 是 用 户 数 和 应 用 表 数 都 很 多 时, 这 时 必 然 要 使 用 角 色 来 管 理 应 用 权 限 的 分 配。 当 然 不 能 直 接 将 权 限 或 角 色 直 接 分 配 给 用 户, 否 则 用 户 可 以 不 同 过 应 用 系 统, 而 采 用SQL*PLUS 等 前 端 工 具 进 入 系 统, 进 行 一 些 没 有 经 过 应 用 系 统 检 查 的 操 作, 产 生 的 结 果 可 能 不 符 合 应 用 逻 辑。
---- 我 们 在 实 践 中 发 现, 可 以 采 用 另 一 种 方 式 利 用 角 色 功 能, 来 防 止 上 面 出 现 的 安 全“ 漏 洞”。 在 这 种 方 式 下, 用 户 采 用 自 己 的 标 识 和 口 令 注 册, 但 在 未 得 到 授 权 的 角 色 前, 是 没 有 操 纵 数 据 库 的 任 何 权 限。 而 授 权 用 户 使 用 的 角 色 是 埋 在 应 用 程 序 中 的, 只 有 应 用 程 序 才 知 道 角 色 的 名 称 和 口 令, 从 而 激 活 角 色, 使 用 户 拥 有 相 应 的 权 限。 在 应 用 系 统 之 外, 用 户 可 以 连 接 到ORACLE, 但 没 有 激 活 相 应 的 角 色, 他 是 不 能 做 任 何 事 情 的, 而 开 发 人 员 不 知 道 用 户 的 标 识 和 口 令, 他 没 有 办 法 登 录 到ORACLE, 即 使 他 能 够 推 算 出 角 色 的 标 识 和 口 令。
---- 下 面 根 据 一 个 例 子 给 出 具 体 的 实 现 过 程:
---- 我 们 假 设 用 户xiaoli 在 工 作 中 能 够 对 工 资 表account.paytable(account 是 表paytable 的 拥 有 者) 有 查 询 和 更 新 的 权 限, 而 这 些 权 限 我 们 不 直 接 授 予xiaoli, 而 是 构 造 一 个 角 色( 比 如 考 勤 员checkerrole), 这 个 角 色 恰 好 适 合 于xiaoli, 再 将 角 色 授 予xiaoli, 但 角 色 在 激 活 时 需 要 口 令, 该 口 令 不 对xiaoli 公 开。 每 个 用 户 需 要 一 个 缺 省 的 角 色, 是 用 户 连 接 到ORACLE 时 的 缺 省 角 色。 这 个 角 色 只 有CONNECT 权 限, 我 们 假 为defaultrole。
---- 下 面 给 出 具 体 的 操 作SQL:
(1)设定各种角色,及其权限
CREATE ROLE checkerrole IDENTIFIED BY xm361001;
CREATE ROLE defaultrole IDENTIFIED BY defaultrole;
GRANT SELECT,UPDATE ON account.paytable TO checkerrole;
GRANT CONNECT TO defaultrole;
(2)创建用户
CREATE USER xiaoli IDENTIFIED BY xiaoli;
(3)授权
GRANT checkerrole TO xiaoli;
GRANT defaultrole TO xiaoli;
(4)设定用户缺省的角色
ALTER USER xiaoli DEFAULT ROLE defaultrole;
(5)注册过程
CONNECT xiaoli/xiaoli@oracle
此时用户只有其缺省角色的权限。
(6)激活角色
SET ROLE checkerrole IDENTIFIED BY xm361001;
---- 操 作 成 功 后,xiaoli 拥 有checkerrole 的 权 限。
---- 这 里 的 角 色 和 口 令 是 固 定 的, 在 应 用 系 统 中 可 以 由 应 用 管 理 人 员 自 行 设 置 则 更 为 方 便 安 全。
---- 上 面 给 出 的 是 在SQL*PLUS 下 的 操 作 过 程, 在 实 际 中 还 是 要 与 应 用 系 统 联 系 在 一 起。 我 们 不 讨 论 用 户 和 角 色 的 创 建 怎 样 在 应 用 开 发 语 言 中 的 实 现 过 程, 在 这 里 给 出 用 户 登 录 时 的POWERBUILDER 代 码, 理 解 了 这 个 例 子, 前 者 的 实 现 也 不 难。
Transaction gtr_Oracle7
gtr_Oracle7=create Transaction
gtr_Oracle7.DBMS="O73"
gtr_Oracle7.database=""
gtr_Oracle7.UserID=ls_UserID
//通过对话框取得的用户标识
gtr_Oracle7.DBPass=ls_Passwd
//通过对话框取得的用户口令
gtr_Oracle7.LogID=ls_UserID
gtr_Oracle7.LogPass=ls_Passwd
gtr_Oracle7.ServerName="@oracle"
//在SQL*NET中创建的别名
gtr_Oracle7.DBParm=""
Connect Using gtr_Oracle7;
if gtr_Orale7.sqlcode=-1 then
MessageBox("错误","没有注册到数据库系统!")
return -1
end if
//ls_Role和ls_RolePasswd为从配置文件中
或通过其它途径获得的用户的角色名和口令
Execute Immediate "SET ROLE "+ls_Role+
" IDENTIFIED BY "+ls_RolePasswd
Using gtr_Oracle7;
If gtr_Oracle7.sqlcode<>0 then
MessageBox("错误","没有激活相应的数据库系统角色!")
Disconnect Using gtr_Oracle7;
return -1
End if
Return 1 //成功注册并激活角色!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -