第 5 章 与 W indows NT 安 全 性 的 集 成
数 据 库 安 全 性 的 存 在 可 避 免 未 授 权 用 户 查 阅 、 添 加 、 改 变 或 删 除 数 据 。 随着 对 Internet 和 各 公 司 上 数 据 库 的 访 问 不 断 增 长 , 最 近 对 访 问 敏 感 数 据 的 控 制 比以 往 任 何 时 候 都 更 引 人 注 目 , 甚 至 连 普 通 人 都 对 此 领 域 很 感 兴 趣 , 无 人 希 望 由未 授 权 用 户 或 随 机 用 户 访 问 或 改 变 自 己 的 信 息 , 如 信 用 报 告 或 Social Security 信息 等 。
作 为 数 据 库 管 理 员 , 应 对 保 护 数 据 特 别 关 注 , 以 防 止 未 授 权 用 户 查 阅 或 改变 数 据 , 还 要 注 意 系 统 使 访 问 对 于 管 理 和 维 护 更 加 方 便 , 因 为 如 果 没 有 合 适 的过 程 和 标 准 , 就 不 能 管 理 这 种 访 问 , 尤 其 是 在 负 责 成 千 上 万 用 户 的 访 问 时 就 更是 如 此 。
把 用 户 的 责 任 分 成 几 个 组 和 角 色 可 增 加 安 全 性 , 因 为 工 作 可 以 分 为 多 份 ,
这 样 每 个 任 务 可 由 两 个 用 户 分 担 。 只 为 角 色 或 组 指 定 完 成 工 作 所 需 的 权 限 。 例如 , 可 以 由 一 个 工 人 批 准 某 个 验 证 , 而 由 另 一 个 工 人 打 印 和 邮 寄 这 份 验 证 。
SQL Server 和 NT 在 检 查 用 户 的 访 问 和 许 可 时 集 成 起 来 的 方 法 已 进 行 了 强 化和 简 化 , 已 经 消 除 了 整 个 管 理 层 。 现 在 有 一 种 分 层 安 全 系 统 , 其 中 角 色 和 组 以及 用 户 都 可 成 为 其 他 角 色 的 成 员 , 在 许 多 层 都 可 以 指 定 许 可 。
Security Manager 的 消 失
不 再 使 用 Security M anager 并 从 M icrosoft SQL Server 工 具 集 中 删 除 。 现 在 , 为 数 据 库 管 理 可 靠 的 用 户 访 问 、 为 用 户 提 供 特 定 和 控 制 的 许 可 是 十 分 简 单 的 。访 问 M icrosoft SQL Server 的 组 成 要 素 是 注 册 、 用 户 、 角 色 和 组 。 下 面 首 先 介 绍注 册 ,注册就是在 M icrosoft SQL Server 中 验 证 用 户 身 份 的 方 法 。然 后 介 绍 用 户 、角 色 和 组 。
现 在 , 当 用 M icrosoft SQL Server 工 作 时 , 安 全 性 分 成 两 部 分 :身 份 验 证 和 许可 的 有 效 性 。 身 份 验 证 是 安 全 性 的 一 个 部 分 , 它 可 识 别 用 户 , 并 确 认 允 许 用 户连 接 SQL Server 。 许 可 有 效 性 用 于 控 制 访 问 数 据 库 和 数 据 库 内 的 对 象 。 它 还 控制 用 户 对 数 据 库 的 访 问 完 成 时 可 以 执 行 的 操 作 。
身 份 验 证
现 在 ,识 别 用 户 和 确 认 用 户 有 访 问 SQL Server 的 许 可 只 有 两 种 方 法 :Windows N T 验 证 和 SQL Server 验 证 。SQL Server 可 以 配 置 为 使 用 验 证 的 NT Authentication 服 务 器 模 式 或 M ixed 服 务 器 模 式 。 M ixed 表 示 W indows NT 验 证 注 册 ID 和 S Q L Server 验 证 注 册 ID 都 可 用 于 获 得 SQL Server 的 访 问 权 。 如 果 采 用 N T Authentication 模 式 , 则 只 允 许 采 用 W indows NT Authentication 注 册 ID 。
下 面 的 第 一 个 表 展 示 了 目 前 在 M icrosoft SQL Server 、 M ixed 和 N T Authentication 中 都 可 用 的 验 证 模 式 。 M ixed Authentication 模 式 有 两 种 验 证 类型 :NT Authentication 和 SQL Server Authentication , 而 NT Authentication 模 式 只有 NT Authentication 一 种 类 型 。 下 面 第 二 个 表 展 示 了 验 证 模 式 中 的 两 种 验 证 类型 , 分 别 称 为 NT Authentication 和 SQL Server Authentication 。 该 表 还 展 示 了 验证 类 型 的 特 性 。
验证模式 =Mixed |
验证模式 =NT Authentication |
---|---|
Windows NT Authentication 注册 ID 和/或 SQL Server Authentication 注 册 ID |
只有 Windows NT Authentication 注册 ID |
Windows NT Authentication |
SQL Server Authentication |
---|---|
不必键入注册 ID |
必须键入注册 ID |
不必键入密码 |
必须键入密码 |
NT Administrator 必须创建 NT Account 或 NT Group 。 |
没有相关的 N T 帐户或组 |
Login ID 就 是 NT Account 或 NT Group |
注册 ID 是未与 N T 安全性集成的 SQL Server 注册 ID 。这只是 SQL Server 安全性功能,与Windows NT 无 关 委 托 NT( 已 委 托 ) 不 委 托 NT ( 未委托 ) |
Windows NT 验 证 模 式
NT Authentication 模 式 下 与 SQL Server 的 网 络 连 接 假 定 为 SQL Server 和 客
户 机 之 间 的 委 托 连 接 (trusted connection) 。 委 托 连 接 通 过 网 络 协 议 (Named Pipes 命 名 管 道 、 M ulti-protocol 等 ) 获 得 支 持 , 网 络 协 议 支 持 服 务 器 和 客 户 机 之 间 的 委托 连 接 。 当 NT 建 立 委 托 连 接 并 将 注 册 ID 和 密 码 传 送 给 SQL Server 时 , S Q L Server 并 不 检 验 密 码 或 帐 户 , 它 假 设 该 注 册 ID 和 密 码 是 正 确 的 , 因 为 在 用 户 进入 网 络 时 NT 已 经 验 证 了 该 用 户 。 SQL Server 使 用 同 一 个 NT 网 络 用 户 名 和 密码 来 验 证 SQL Server 中 的 用 户 , 就 像 NT 用 来 验 证 网 络 上 的 用 户 或 访 问 操 作 系统 一 样 ; 换 言 之 , 用 Windows NT Authentication 模 式 访 问 SQL Server 上 的 数 据库 , 并 不 需 要 单 独 的 注 册 ID 和 密 码 。 因 为 这 种 类 型 的 验 证 允 许 SQL Server 充分 利 用 N T 的 安 全 特 性 , 所 以 它 是 很 有 利 的 。 N T 安 全 特 性 由 SQL Server 所 提供 的 极 为 丰 富 的 验 证 功 能 集 组 成 。 用 户 在 自 己 的 网 络 身 份 下 访 问 SQL Server 之前 , 必 须 进 入 网 络 并 通 过 所 有 N T 验 证 功 能 的 验 证 。 例 如 , 可 以 设 置 NT 验 证 , 以 使 密 码 在 给 定 时 间 后 失 效 。
注意 : 使 用 M icrosoft Management Console ,把 SQL Server 注 册 到 服 务 器 组 中 , 参 见 图 5.1 。
图 5.1 设置 Windows NT Authentication 模式
要 充 分 利 用 W indows NT 安 全 性 , 应 设 置 SQL Server 的 W indows NT Authentication Mode:
-
展 开 服 务 器 组 。
-
选 择 一 个 服 务 器 , 右 击 该 服 务 器 , 再 选 择 Properties 。
-
单 击 Security 标 签 。
-
只 选 择 W indows NT 或 选 择 SQL Server 和 W indows N T 。
-
选 择 O K 按 钮 。
要 定 义 W indows NT 帐 户 或 组 和 SQL Server 注册 ID 之 间 的 关 系 , 并 设 置
W indows NT 和 SQL Server 之 间 的 委 托 连 接 , 可 使 用 下 列 语 法 : sp_grantlogin ′ DomainNam e\ NTusernam e′
也 可 使 用 下 面 的 语 法 :
sp_grantlogin [ DomainNam e\ NTusernam e]
注 意 : 如 果 游 标 位 于 服 务 器 组 中 的 相 应 服 务 器 上 , 可 使 用 M icrosoft M anagement Console 上 的 Tools 菜 单 中 的 SQL Query Analyzer Too l 。 在 该 窗 口 和主 数 据 库 中 找 到 自 己 。
W indows NT 用 户 或 组 需 要 用 户 或 组 许 可 , 以 连 接 到 M icrosoft SQL Server 上 。 如 果 Windows NT 组 的 所 有 成 员 都 连 接 到 SQL Server 上 , 可 以 为 该 组 的 所有 成 员 添 加 一 个 SQL Server 注 册 帐 户 。 如 果 并 非 全 部 组 员 都 应 获 得 许 可 , 则 可以 为 单 个 Windows NT 用 户 添 加 SQL Server 注 册 。
另 外 , 还 可 以 用 M icrosoft M anagement Console 为 Windows NT 验 证 和 S Q L Server 验 证 添 加 SQL Server 注 册 。 图 5.2 表 示 W indows NT 验 证 。
注意 : 使 用 M icrosoft Management Console ,把 SQL Server 注 册 到 服 务 器 组 中 , 参 见 图 5.2 。
图 5.2 创建 Windows NT 验证注册 ID
-
展 开 服 务 器 名 。
-
右 击 Logins , 然 后 选 择 New Login 。
-
选 择 W indows NT Authentication 。
-
键 入 W indows NT 帐 户 。
-
设 置 用 户 的 缺 省 数 据 库 。
-
SQL Server 验 证 模 式
-
SQL Server Authentication 模 式 下 与 SQL Server 的 网 络 连 接 假 定 为 S Q L Server 和 客 户 机 之 间 的 非 委 托 连 接 。 用 户 键 入 已 设 置 为 SQL Server 标 准 注 册 的注 册 名 和 密 码 。 SQL Server 将 验 证 注 册 ID 和 密 码 本 身 , 并 与 系 统 管 理 员 已 经 预定 义 成 SQL Server 注 册 ID 的 注 册 ID 相 比 较 。 如 果 系 统 管 理 员 尚 未 设 置 指 定 的注 册 ID , 则 连 接 失 败 。
SQL Server 验 证 有 几 种 比 较 好 的 用 途 , 可 以 编 写 许 多 应 用 程 序 来 使 用 它 。许 多 人 都 喜 欢 使 用 这 种 方 法 , 因 为 他 们 了 解 注 册 和 密 码 , 而 NT 验 证 可 以 十 分复 杂 而 模 糊 。 SQL Server 验 证 还 可 用 于 Internet 客 户 机 , 以 及 不 是 基 于 W indows N T 的 操 作 系 统 。
有 时 , 整 个 应 用 程 序 及 其 所 有 用 户 使 用 同 一 个 SQL Server 注 册 和 密 码 。 这种 类 型 的 访 问 易 于 管 理 , 但 由 于 不 跟 踪 每 个 用 户 的 标 识 , 而 带 有 安 全 性 风 险 , 所 以 不 应 用 于 包 含 机 密 信 息 的 数 据 库 , 如 销 售 或 人 事 信 息 。
注意 : 将 游 标 定 位 在 服 务 器 组 中 的 服 务 器 上 后 , 可 使 用 M icrosoft M anagement
Console 的 Tool 菜 单 上 的 SQL Query Analyzer Tool 。
要 创 建 SQL Server 注 册 (SQL Server 验 证 ), 可 执 行 下 列 程 序 : sp_addlogin ′ login ′ , ′ password ′ , ′ database ′ , ′ language′ ,
′ login_pid ′ , ′ sid ′
除 了 注 册 外 , 所 有 自 变 量 都 是 可 选 的 , 这 些 自 变 量 都 作 为 系 统 名 存 储 在 主数 据 库 的 syslogins 表 中 。 自 变 量 将 在 第 23 章 “ 系 统 存 储 过 程 ” 中 详 细 讨 论 。
此 外 , 还 可 以 用 M icrosoft M anagement Console 为 Windows NT 验 证 和 S Q L Server 验 证 添 加 SQL Server 注 册 ( 图 5.3 展 示 了 SQL Server 验 证 ), 其 步 骤 如 下 :
- 展 开 服 务 器 名 。
图 5.3 创建 SQL Server 验证注册 ID
-
右 击 Logins , 然 后 选 择 New Login 。
-
选 择 SQL Server Authentication 。
-
键 入 注 册 名 和 密 码 。
-
为 用 户 选 择 缺 省 数 据 库 。
两 种 类 型 的 注 册 ID 之 间 主 要 的 、 可 立 即 看 出 的 差 别 是 , 当 显 示 连 接 到 S Q L Server 的 屏 幕 时 , 采 用 Windows NT 验 证 注 册 ID 的 用 户 不 必 键 入 注 册 ID 和 密码 , 而 采 用 SQL Server 验 证 注 册 ID 的 用 户 则 必 须 键 入 。 因 为 N T 把 注 册 ID 和密 码 传 递 给 SQL Server , 再 由 SQL Server 检查 NT 帐 户 或 组 是 否 为 syslogins 表的 成 员 , 所 以 W indows NT 验 证 发 生 作 用 。 另 一 个 差 别 是 , 如 果 在 选 择 W indows NT Authentication 后 再 输 入 域 名 , 该 域 名 将 自 动 显 示 为 Name 域 的 第 一 部 分 (NT 用 户 必 须 提 前 创 建 )。
总 之 , 注 册 有 两 种 类 型 , 即 N T 验 证 注 册 和 SQL Server 验 证 注 册 。 注 册 ID 用 于 验 证 , 即 识 别 用 户 和 确 认 数 据 库 访 问 。 注 册 ID 有 一 个 缺 省 数 据 库 , 该 数 据库 在 建 立 连 接 时 使 用 , 并 且 在 创 建 时 为 注 册 ID 而 定 义 。
许 可 的 有 效 性
至 此 , 用 户 已 了 解 了 如 何 使 用 两 种 类 型 SQL Server 注 册 ID 中 的 一 种 来 获 得M icrosoft SQL Server 的 访 问 权 , 下 面 讲 述 注 册 ID 如 何 与 SQL Server 数 据 库 用户 相 关 联 。
数 据 库 用 户
SQL Server 注 册 ID 和 数 据 库 用 户 ID 之 间 的 区 别 之 一 是 ,SQL Server 注 册 ID 可 用 于 整 个 SQL Server 。 一 个 注 册 ID 可 以 与 多 个 数 据 库 用 户 相 关 联 , 所 有 数 据库 都 可 用 存 储 过 程 sp_grantdbaccess 在 SQL Server 注 册 ID 和 数 据 库 用 户 ID 之间 建 立 关 系 。 另 一 方 面 , 数 据 库 用 户 ID 则 只 能 在 SQL Server 上 的 特 定 数 据 库中 正 常 工 作 。
关 系 必 须 由 用 户 来 定 义 , 该 用 户 在 SQL Server 注册 ID 和 数 据 库 用 户 ID 之间 扮 演 着 db_accessadmin 或 db_owner 的 角 色 。 可 以 在 数 据 库 内 部 创 建 用 户 , 并把 已 建 立 的 SQL Server 注册 ID 作 为 参 数 传 递 给 sp_grantdbaccess 存 储 过 程 , 来完 成 上 述 定 义 。 在 这 种 方 式 中 , 如 果 数 据 库 用 户 ID 没 有 与 有 效 的 SQL Server 注 册 ID 相 关 联 , 就 不 能 创 建 数 据 库 用 户 ID 。 ( 在 SQL Server 7 以 前 的 版 本 中 , 使 用 sp_adduser 命令 ;它 仍 支 持 向 后 的 兼 容 性 )。
sp_grantdbaccess 命 令 可 把 SQL Server 注 册 ID 与 数 据 库 用 户 ID 连 接 起 来 , 这 就 是 为 什 么 在 特 定 的 数 据 库 中 允 许 使 用 SQL Server 注册 ID 许 可 。
sp_grantdbaccess ′ login ′ , ′ databaseusernam e′
该 命 令 可 在 数 据 库 的 sysuser 系 统 表 中 创 建 新 的 数 据 库 用 户 , 并 使 数 据 库 用户 ID 与 SQL Server 注 册 ID 建 立 关 系 , 该 SQL Server 注 册 ID 可 以 用 sp_grantlogin 为 W indows NT 验 证 用 户 而 创 建 , 也 可 以 用 sp_addlogin 为 SQL Server 验 证 用 户而 创 建 。 login 是 一 个 必 选 自 变 量 , 而 databaseusername 则 是 一 个 可 选 自 变 量 , 如 果 省 略 这 个 自 变 量 , 就 使 用 缺 省 值 login , 并 使 两 个 参 数 相 同 。 相 反 , 要 删 除
数 据 库 用 户 , 可 使 用 sp_revokedbaccess 存 储 过 程 。使 用 sp_grantdbaccess 规 则 如 下 :
-
在 用 户 定 义 的 事 务 内 不 能 使 用
-
SA 注 册 不 能 添 加 到 数 据 库 中
-
W indows NT 帐 户 或 组 需 要 用 域 名 验 证
-
只 能 由 作 为 某 种 数 据 库 角 色 ( db_accessadmin 或 db_owner ) 的 用 户 来 执行 使 用 sp_revokedbaccess 规 则 为 :
-
在 用 户 定 义 的 事 务 内 不 能 使 用
-
不 能 删 除 数 据 库 中 的 公 共 角 色 、 DBO 用 户 或 固 定 角 色
-
不 能 删 除 主 数 据 库 和 tempdb 数 据 库 中 的 Guest User 帐 户
-
不 能 从 NT 组 中 删 除 W indows NT 用 户
-
只 能 由 作 为 某 种 数 据 库 角 色 ( db_accessadmin 或 db_owner
) 的 用 户 来 执
行
- 如 果 用 户 在 数 据 库 中 拥 有 对 象 , 就 不 能 删 除 该 用 户 ;
必 须 在 使 用
sp_revokedbaccess 之 前 , 用 存 储 过 程 sp_changeobjectowner 改 变 该 对 象 的 拥 有 者
注意 : 使 用 M icrosoft Management Console , 并 把 SQL Server 注 册 到 服 务 器 组中 。
作 为 sp_grantdbaccess 的 替 代 程 序 , 可 以 使 用 M icrosoft Management Console
为 W indows NT 验 证 和 SQL Server 验 证 创 建 新 的 数 据 库 用 户 ( 请 参 阅 图 5.4):
图 5.4 创建新的数据库用户
-
展 开 服 务 器 , 并 选 择 数 据 库 。
-
右 击 该 数 据 库 ;
-
选 择 New , 然 后 再 选 择 New Database Use r。
-
选 择 注 册 名 。
-
键 入 用 户 名 。
-
选 择 要 放 入 用 户 的 角 色 。
-
单 击 O K 。
该 sp_grantdbaccess 存 储 过 程 是 把 注 册 ( 验证 ) 映 射 到 使 用 的 SQL Server 数 据库 用 户 上 的 方 式 , 以 控 制 对 数 据 库 中 对 象 的 访 问 和 执 行 的 操 作 ( 许 可 有 效 ) 。 这实 际 上 是 把 验 证 和 许 可 有 效 这 两 部 分 安 全 性 连 接 起 来 , 以 提 供 安 全 访 问 和 特 定许 可 。 如 果 注 册 ID 和 数 据 库 用 户 ID 同 名 , 管 理 起 来 会 更 方 便 。 用 户 应 考 虑 把这 种 设 置 作 为 系 统 中 的 标 准 设 置 。
要 进 一 步 改 进 这 种 访 问 , 而 且 准 许 一 组 用 户 集 体 获 得 特 定 许 可 , 可 使 用 组和 角 色 。
NT 组 和 SQL Server 角 色
把 用 户 放 到 组 和 角 色 中 , 将 更 易 于 一 次 管 理 多 用 户 的 许 可 。 组 (group) 是 管理 W indows NT 内 的 用 户 或 其 他 组 的 一 种 方 法 。而 角 色 (role)则 是 管 理 SQL Server 内 部 用 户 的 方 法 , SQL Server 可 包 含 SQL Server 注 册 、 W indows NT 注 册 、 组或 其 他 角 色 。 以 前 版 本 的 SQL Server 中 , 数 据 库 组 由 角 色 所 代 替 , 角 色 的 功 能是 非 常 强 大 的 。 Sp_addgroup 、 sp_changegroup 、 sp_dropgroup 已 经 包 含 了 向 后的 兼 容 性 , 但 它 们 现 在 只 是 处 理 角 色 的 次 要 方 法 。
NT 组
通 过 创 建 组 的 SQL Server 注 册 , 可 以 访 问 SQL Server 上 整 个 N T 组 的 注 册 。而 GRANT 语 句 用 于 允 许 用 户 、 角 色 或 组 获 得 访 问 数 据 或 执 行 数 据 库 中 特 定 操作 的 许 可 。 这 种 许 可 只 准 许 当 前 数 据 库 中 的 用 户 使 用 。 相 反 , REVOKE 语 句 用于 剥 夺 已 授 予 的 许 可 , 而 DENY 语 句 用 于 阻 止 用 户 从 发 出 GRANT 的 人 手 中 获得 许 可 。 为 NT 组 设 置 SQL Server 注 册 的 一 个 重 要 方 面 是 一 旦 进 行 了 设 置 , 就只 需 为 NT 组 增 加 新 的 用 户 。 而 SQL Server 注 册 和 数 据 库 许 可 已 经 就 绪 。
许 可 有 两 种 类 型 :object( 对 象 ) 和 statement( 语 句 ) 许 可 。 对 象 许 可 为 用 户 提 供访 问 许 可 , 以 便 使 用 诸 如 数 据 库 中 已 有 的 表 、 视 图 、 程 序 和 扩 展 程 序 等 对 象 。而 语 句 许 可 允 许 访 问 特 定 的 Transact_SQL 语 句 , 如 GREATE TABLE 或EXECUTE PROCEDURE 。
当 某 个 组 是 某 个 高 级 组 的 成 员 时 , 除 了 为 该 组 本 身 或 用 户 帐 户 定 义 的 安 全设 置 外 , 该 组 的 所 有 成 员 还 继 承 了 高 级 组 的 安 全 设 置 。
SQL Server 角 色
如 果 没 有 NT 组 ,仍 可 以 把 用 户 组 织 到 一 个 共 同 单 元 中 ,并 可 使 用 角 色 (roles) 集 中 管 理 这 些 用 户 。 可 以 创 建 用 户 的 功 能 集 (NT 验 证 和 SQL Server 验 证 ), 以 及其 他 角 色 。 这 是 简 化 数 据 库 许 可 管 理 的 强 大 工 具 。
注意 : 使 用 M icrosoft Management Console(MMC ), 可 把 SQL Server 注 册 到 服
务 器 组 中 , 请 参 见 图 5.5 。
图 5.5 分配固定的服务器角色
使 用 M icrosoft M anagement Console 可 以 为 SQL Server 验 证 注 册 ID 把 用 户分 配 给 固 定 角 色 :
-
展 开 M M C 中 的 服 务 器 名 。
-
右 击 Logins , 然 后 选 择 New Login 。
-
选 择 SQL Server Authentication 。
-
键 入 SQL Server Authentication 或 NT 帐 户 或 W indows NT Authentication
用 户 的 注 册 名 和 密 码 。
-
设 置 用 户 的 缺 省 数 据 库 。
-
单 击 Server Roles 标 签 。
-
单 击 提 供 给 用 户 的 Roles 。
固 定 服 务 器 角 色 固 定 服 务 器 角 色 存 在 于 服 务 器 级 并 处 于 特 定 数 据 库 之 外 。用 户 必 须 拥 有 N T 注 册 帐 户 或 SQL Server 注 册 帐 户 , 才 能 添 加 到 固 定 服 务 器 角色 中 。 固 定 服 务 器 角 色 的 任 何 成 员 都 可 以 把 其 他 注 册 添 加 到 角 色 中 。
下 表 表 示 Fixed Server Role 名和 Fixed Server Role 的 许 可 :
固定服务器角色名 |
该角色的功能 |
---|---|
系统管理员, sysadmin |
执行 SQL Server 中任何动作的许可 |
服务器管理员, serveradmin |
配置用于服务器的设置的许可 |
设置管理员, setupadmin |
允许安装复制程序,管理扩展程序 |
安全管理员, securityadmin |
允许管理服务器注册 |
进程管理员, processadmin |
允许管理 SQL Server 中运行的进程 |
数据库创建员, dbcreator |
允许创建和改变数据库 |
续 表
磁盘管理员, diskadmin |
允许管理磁盘文件 |
---|---|
要 为 固 定 服 务 器 角 色 添 加 成 员 , 请 参 见 图 5.5 的 M icrosoft M anagement Console , Enterprise Manager 方 法 , 也 可 使 用 下 面 的 存 储 过 程 :
sp_addsrvrolemember ′ security_accoun t′ , ′ role ′
用 户 将 继 承 正 在 扮 演 的 角 色 的 所 有 许 可 。 固 定 服 务 器 角 色 表 示 它 们 的 确 切含 义 , 不 能 删 除 或 改 变 它 们 。 只 有 得 到 执 行 sp_addsrvrolemember 许 可 的 人 才 能成 为 固 定 服 务 器 角 色 的 其 他 成 员 。 syslogins 系 统 表 可 更 新 以 指 明 为 哪 个 固 定 服务 器 角 色 分 配 哪 个 注 册 ID 。
要 从 固 定 服 务 器 角 色 中 删 除 某 个 成 员 , 请 参 照 图 5.5 所 示 的 Enterprise M anager 方 法 , 或 使 用 下 面 的 存 储 过 程 :
sp_dropsrvrolemember ′ security_account ′ , ′ role ′ 不 能 从 固 定 服 务 器 角 色 中 删 除 SA (系 统 管 理 员 )。
固 定 数 据 库 角 色 固 定 数 据 库 角 色 存 在 于 数 据 库 级 , 且 处 于 特 定 数 据 库 内
部 。 用 户 必 须 拥 有 N T 注 册 帐 户 或 SQL Server 注 册 帐 户 才 能 添 加 到 固 定 数 据 库角 色 中 。 角 色 也 可 以 添 加 到 固 定 数 据 库 角 色 中 。 固 定 数 据 库 角 色 的 任 何 成 员 都可 以 把 其 他 人 添 加 到 该 角 色 中 。
下 表 表 示 Fixed Database Role 名 和 Fixed Database Role 的 许 可 。
固定数据库角色名 |
该角色的功能 |
---|---|
Db_owner |
作为 DBO ,除了其他 Database Owner 任 务 外 , 还 允 许 处 理 所 有 其 他 数 据 库 角 色 的所有操作 |
Db_accessadmin |
允许和禁止对数据库中的 Windows NT 组 /用户和 SQL Server 用户的访问 |
Db_datareader |
允 许 查 看 数 据 库 中 所 有 用 户 表 中 的 所 有 数 据 |
Db_datawriter |
允许修改数据库中所有用户表中的数据 ( 插 入、更新、删除 ) |
Db_ddladmin |
允 许 创 建 、 更 改 和 / 或 删 除 数 据 库 中 的 对 象 |
Db_securityadmin |
允 许 管 理 数 据 库 中 的 角 色 和 语 句 以 及 对 象 许可 |
Db_dumpoperator |
允许备份数据库 |
Db_denydatareader |
不许查看数据库中的任何数据 |
Db_denydatawriter |
不许修改数据库中的任何数据 |
要 为 固 定 数 据 库 角 色 添 加 成 员 , 请 参 照 图 5.6 , 或 使 用 下 面 的 存 储 过 程 : sp_addrolemember ′ role ′ , ′ security_accoun t′
图 5.6 分配固定服务器角色
用 户 将 继 承 正 在 扮 演 的 角 色 的 所 有 许 可 。 如 果 安 全 性 帐 户 用 于 W indows NT
用 户 或 组 , 并 且 不 是 数 据 库 中 的 用 户 , 他 们 就 将 自 动 添 加 为 用 户 。使 用 W indows N T 用 户 或 组 的 安 全 性 帐 户 前 面 的 域 名 , 例 如 , DomainNam e\ securityAccount, 可 用 于 安 全 性 帐 户 自 变 量 。 如 果 安 全 性 帐 户 用 于 SQL Server 用 户 或 角 色 , 那 么这 些 用 户 或 角 色 必 定 处 在 执 行 命 令 的 数 据 库 中 。 当 安 全 性 帐 户 代 表 SQL Server 用 户 时 , 可 以 用 没 有 域 名 前 缀 的 安 全 性 帐 户 作 为 安 全 性 帐 户 参 数 。 如 果 有 用 户定 义 的 角 色 , 不 要 试 图 在 数 据 库 级 或 服 务 器 级 上 把 固 定 角 色 添 加 到 用 户 定 义 的角 色 上 , 因 为 这 样 做 是 无 效 的 。 固 定 数 据 库 角 色 是 其 本 身 的 确 切 含 义 , 不 能 删除 或 改 变 它 们 。 sysusers 系 统 表 可 更 新 以 指 明 哪 个 数 据 库 用 户 在 扮 演 哪 个 固 定 数据 库 角 色 。
除 了 如 图 5.6 所 示 的 固 定 数 据 库 角 色 外 , M icrosoft SQL Server 还 有 两 个 特殊 的 用 户 / 角 色 许 可 :
-
Guest user 如 果 用 户 试 图 访 问 数 据 库 , 而 且 尚 未 成 为 数 据 库 用 户 , 则 该用 户 将 成 为 Guest 用 户 。 这 意 味 着 他 们 可 以 访 问 数 据 库 中 Guest 用 户 允 许 使 用的 任 何 对 象
-
Public role 如 果 希 望 为 数 据 库 中 的 每 个 人 提 供 某 些 对 象 的 许 可 , 或 执 行某 些 操 作 , 就 可 以 为 Public 角 色 提 供 许 可 。 为 Public 角 色 提 供 的 许 可 可 以 授 予每 个 人 使 用 下 列 系 统 支 持 的 存 储 过 程 , 可 显 示 每 个 固 定 数 据 库 角 色 的 许 可 : sp_dbfixedrolepermission ′ role ′
注 意 : Query Anglyzer 位 于 Microsoft Management Console 的 Tools 菜 单 中 。可 以 在 Query Analyer 窗 口 中 执 行 存 储 过 程 。
从 Query Analyzer 中 输 出 下 列 信 息 :
DbFixedRole |
许可 (Permission) |
---|---|
Db_owner |
数据库中的每一项内容 |
Db_accessadmin |
为 db_accessadmin 增加成员 |
Db_accessadmin |
sp_adduser |
Db_accessadmin |
sp_dropuser |
Db_accessadmin |
sp_grantdbaccess |
Db_accessadmin |
sp_revokedbaccess |
Db_securityadmin |
为 db_securityadmin 增加成员 |
Db_securityadmin |
DENY |
Db_securityadmin |
GRANT |
Db_securityadmin |
REVOKE |
Db_securityadmin |
sp_addrole |
Db_securityadmin |
sp_addrolemember |
Db_securityadmin |
sp_droprole |
Db_securityadmin |
sp_droprolemember |
Db_ddladmin |
为 db_ddladmin 增加成员 |
Db_ddladmin |
所有 D D L ,但 GRANT 、 REVOKE 、 DENY 除外 |
Db_ddladmin |
sp_adduserobject |
Db_dumpoperator |
为 db_dumpoperator 增加成员 |
Db_dumpoperator |
CHECKPOINT |
Db_dumpoperator |
DUMP DATABASE |
Db_dumpoperator |
DUMP TRANSACTION |
Db_datareader |
为 db_datareader 增加成员 |
Db_datareader |
任意对象的 SELECT 许 可 |
Db_datawriter |
为 db_datawriter 增加成员 |
Db_datawriter |
任意对象的 DELETE 许可 |
续 表
Db_datawriter |
任意对象的 INSERT 许可 |
---|---|
Db_datawriter |
任意对象的 UPDATE 许可 |
Db_denydatareader |
为 db_denydatareader 增加成员 |
Db_denydatareader |
任意对象都无 SELECT 许 可 |
Db_denydatawriter |
为 db_denydatawriter 增加成员 |
Db_denydatawriter |
任意对象均无 DELETE 许 可 |
Db_denydatawriter |
任意对象均无 INSERT 许可 |
Db_denydatawriter |
任意对象均无 UPDATE 许可 |
访 问 数 据 库 的 每 个 人 都 可 执 行 存 储 过 程 sp_dbfixedrolepermission 和
sp_helpdbfixedrole 。
使 用 下 列 系 统 提 供 的 存 储 过 程 , 可 以 显 示 每 个 固 定 数 据 库 角 色 的 名 称 和 说
明 :
sp_helpdbfixedrole ′ role ′
注意 : Query Analyzer 位 于 Microsoft Management Console 的 Tools 菜 单 中 ,
可 以 在 该 窗 口 中 执 行 存 储 过 程 。
从 Query Analyzer 输 出 的 信 息 如 下 :
DbFixedRole |
描述 |
---|---|
Db_owner |
DB Owners (拥有者 ) |
Db_accessadmin |
DB Access Administrators( 访问管理员 ) |
Db_securityadmin |
DB Security Administrators( 安全管理员 ) |
Db_ddladmin |
DB DDL Administrators(DDL 管理员 ) |
续 表
Db_dumpoperator |
DB Dump Operator( 清空操作员 ) |
---|---|
Db_datareader |
DB Data Reader( 数据读入员 ) |
Db_datawriter |
DB Data Writer( 数据写入员 ) |
Db_denydatareader |
DB Deny Data Reader( 拒绝数据读入员 ) |
Db_denydatawriter |
DB Deny Data Writer( 拒绝数据写入员 ) |
注 意 : 使 用 M icrosoft M anagement Console , 可 以 选 择 Server Group 中 的
Server, 然 后 选 择 Database , 并 右 击 Database Role 。
要 在 数 据 库 中 创 建 新 用 户 定 义 的 角 色 , 请 参 阅 图 5.7 或 使 用 下 列 存 储 过 程 : sp_addrole ′ role ′ , ′ owner ′
图 5.7 增加用户定义的数据库角色
owner 参 数 缺 省 为 DBO 拥 有 者 , 然 而 , 如 果 指 定 拥 有 者 , 则 拥 有 者 必 须 是
执 行 命 令 的 数 据 库 中 sysusers 系 统 表 中 的 数 据 库 用 户 或 数 据 库 角 色 。 只 有db_securityadmin 或 db_owner 角 色 才 允 许 使 用 sp_addrole 存 储 过 程 。 可 以 用G R A N T 或 DENY 语 句 为 新 的 数 据 库 角 色 分 配 许 可 。
要 从 数 据 库 中 删 除 数 据 库 角 色 , 可 在 数 据 库 内 部 执 行 下 列 存 储 过 程 : sp_droprole ′ role ′ — — 删 除 标 准 数 据 库 角 色sp_dropapprole ′ role ′ — — 删 除 应 用 程 序 数 据 库 角 色
插 入 sysusers 表 中 的 行 可 从 sysusers 系 统 表 中 删 除 。 不 能 删 除 固 定 角 色 和public 角 色 ; 必 须 先 从 该 角 色 中 删 除 数 据 库 用 户 。 使 用 存 储 过 程sp_droprolemember 可 删 除 角 色 中 的 数 据 库 用 户 。 不 要 在 用 户 定 义 的 事 务 内 部 执行 该 存 储 过 程 , 只 有 db_owner 或 db_securityadmin 角 色 的 成 员 才 允 许 使 用sp_droprole 。
授 予 权 限
授 予 组 或 角 色 的 许 可 可 由 该 组 或 角 色 的 成 员 继 承 下 来 。 许 可 能 在 不 同 的 层次 上 授 予 。 给 用 户 授 予 许 可 有 可 能 与 给 另 一 个 角 色 ( 该 用 户 是 其 一 个 成 员 ) 授予 的 许 可 冲 突 。 如 果 用 户 处 于 多 个 组 或 角 色 中 , 或 与 单 个 用 户 许 可 有 冲 突 , 那么 在 角 色 之 间 发 生 许 可 冲 突 时 , 可 应 用 有 一 定 限 制 的 拒 绝 和 撤 消 防 止 用 户 访 问
对 象 的 许 可 。
许 可 有 以 下 三 种 状 态 :
-
Grant( 授予 )
-
Revoke( 撤消 )
-
Deny( 拒 绝 )
GRANT 语 句
Grant( 授 予 ) 意 味 着 一 个 数 据 库 用 户 可 以 为 另 一 个 数 据 库 用 户 提 供 许 可 , 以便 查 看 数 据 、 改 变 数 据 和 执 行 数 据 库 操 作 。 只 能 在 当 前 数 据 库 中 为 用 户 授 予 当前 数 据 库 的 许 可 。 现 在 G R A N T 语 句 又 新 增 了 一 个 W ITH GRAN 选 项 , 它 允 许给 数 据 库 用 户 的 授 予 许 可 , 也 允 许 该 数 据 库 用 户 给 其 他 用 户 授 予 许 可 。 John 向Jane 提 供 许 可 W ITH GRANT , 这 将 允 许 Jane 将 同 样 的 许 可 授 予 Jay 。 如 果 Jane 为 Jay 提 供 许 可 W ITH GRANT , 那 么 Jay 就 能 向 Jerry 授 予 相 同 的 权 限 。 通 过给 组 和 角 色 授 予 许 可 W ITH GRAN T , 也 可 为 一 组 用 户 提 供 这 种 能 力 。 然 而 , 使用 W ITH GRANT 许 可 时 一 定 要 注 意 , 否 则 将 可 能 不 能 控 制 谁 向 谁 授 予 许 可 。
许 可 有 以 下 两 种 类 型 :
-
语 句 许 可
-
对 象 许 可
语 句 许 可
Transact-SQL GRANT 语 句 可 提 供 语 句 许 可 , 语 句 许 可 为 安 全 帐 户 提 供 了 包括 GRANT 语 句 在 内 的 其 他 Transact-SQL 语 句 的 访 问 权 ,。 在 提 供 语 句 许 可 时 , 可 以 向 用 户 提 供 使 用 下 列 Transact-SQL 语 句 的 许 可 :
A LTER DATABASE EXECUTE
A LTER TABLE G R A N T
BEGIN TRANSACTION 对 象 的 G R A N T CHECKPOINT INSERT COMMIT TRANSACTION KILL
CREATE DATABASE RESTORE DATABASE CREATE DEFAULT LOAD TRANSACTION
CREATE INDEX RAISERROR
CREATE PROCEDURE READTEXT
CREATE RULE RECONFIGURE
CREATE TABLE REFERENCES
CREATE TRIGGER REVOKE
CREATE VIEW 对 象 的 REVOKE
DBCC ROLLBACK TRANSACTION
DELETE SAVE TRANSACTION
DISK INIT SELECT
DISK MIRROR SET
DISK REFIT SETUSER
DISK REINIT SHUTDOWN
DISK REMIRROR TRUNCATE TABLE
DISK UNMIRROR UPDATE
DROP 任 意 对 象 UPDATE STATISTICS
BACKUP DATABASE UPDATETEXT
DUMP TRANSACTION WRITETEXT
语 句 许 可 的 语 法 如 下 :
GRANT { ALL | statemen t[ ,...] }
TO security_account [ ,...]
下 表 表 示 语 句 许 可 的 Grant 语 句 自 变 量 及 其 说 明 :
语句许可的 GRANT 自变量 |
描述 |
---|---|
ALL |
语 句 : 当 用 作 语 句 许 可 时 能 使 用 所 有 语句。在提供了所有语句许可的情况下,只有 System Administrator( 系 统 管 理 员 : SA) 和 Database Owner( 数据库拥有者: DBO) 才能提供全部权限,因为只有这些人才拥有全部权限。当然 , SA 的权限多于 D B O , 因为 SA 涉及服务器范围,而 DBO 只涉 及数据库范围 |
续 表
Statement( 语句 ) |
如 果 授 予 许 可 的 用 户 是 SA , 便 可 使 用CREATE DATABASE 。如果用户不是 SA , 则 可 以 为 另 一 个 用 户 提 供 的 语 句 有CREATE DEFAULT 、 CREATE PROCEDURE 、CREATE RULE 、 CREATE TABLE 、 CREATE VIEW 、 D U M P DATABASE 和 DUMP TRANSACTION 。 这种操作能够使被授予人使用该语句。另外,对象拥有者可以执行插入、更新、删 除、选择、引用和执行等操作 |
---|---|
Security Account( 安全帐户 ) |
许 可 可 提 供 给 这 种 用 户 , 该 用 户 可 以 是 M icrosoft SQL Server User 、 SQL Server Role 、 Windows NT User 或 Windows NT Group |
下 面 是 语 句 许 可 的 G R A N T 语 句 的 一 个 实 例 :
GRANT CREATE DATABASE, CREATE TABLE
TO security_account G O
对 于 W indows NT 验 证 用 户 , 可 以 使 用 DomainNam e\ SecurityAccoun t: GRANT CREATE DATABASE, CREATE TABLE
TO DomainNam e\ SecurityAccount G O
GRANT CREATE TABLE
TO rolename G O
对 象 许 可
对 象 许 可 允 许 用 户 拥 有 下 列 对 象 的 应 用 权 限 : 数 据 库 中 已 有 的 表 、 视 图 、程 序 和 扩 展 存 储 过 程 。 如 果 用 户 是 sysadmin 和 db_securityadmin 角 色 的 成 员 , 可 以 在 所 有 数 据 库 中 授 予 所 有 的 许 可 。 如 果 是 对 象 拥 有 者 , 可 以 给 拥 有 者 的 任何 对 象 授 予 许 可 。 db_owner 角 色 可 以 在 自 己 的 数 据 库 中 授 予 任 何 对 象 的 任 何 许可 。
对 象 许 可 的 语 法 如 下 :
G R A N T
{{ ALL | permission [ ,... ]} [ (column[ ,...] )] ON { table | view }
| ON { stored_procedure | extended_procedure }} To security_account [ ,...]
[ W ITH GRANT OPTION ]
[ AS { group | role }]
对 象 可 的 GRANT 自 变 量 如 下 :
对象许可的 GRANT 自 变 量 |
描述 |
---|---|
ALL |
对 象 :在 ALL 用 于 提 供 某 个 对 象 的 用 户 许 可时,传递该对象的所有权限 |
续 表
Statement( 语句 ) |
如 果 授 予 许 可 的 用 户 是 SA , 则 可 使 用CREATE DATABASE 。如果用户不是 SA , 可以为另一个用户提供的语句有 : CREATE DEFAULT 、 CREATE PROCEDURE 、CREATE RULE 、 CREATE TABLE 、 CREATE VIEW 、 DUMP DATABSE 和 D U M P TRANSACTION 。 这 种 操 作 可 使 被 授 予 者 使 用 该 语 句 。 另 外 , 对 象 拥 有 者 还 可 使 用插入、更新、删除、选择、引用和执行 |
---|---|
TO Security Account( 到安全帐户 ) |
为该用户提供许可 ,该用户可以是 M icrosoft SQL Server User 、 SQL Server Role 、 Windows NT User 或 Windows NT Group |
W ITH GRANT OPTION |
使用户能把指定的许可授予其他用户 |
A S { group | role } |
该 自 变 量 指 明 授 予 许 可 的 用 户 位 于 哪 个 组或 角 色 。 如 果 授 予 人 位 于 多 个 角 色 中 , 则可 能 发 生 许 可 冲 突 , 授 予 人 可 以 指 明 允 许 哪个角色或组授予这些许可 |
Permission( 许可 ) |
对 象 许 可 由 授 予 人 授 予 给 被 授 予 人 。 参 见 下一个表可了解哪些对象有哪些许可 |
ON Table |
用户获准用指定的许可访问的表格名称 |
ON Column |
用户获准用指定的许可访问的列名 |
ON View |
用户获准用指定的许可访问的视图名 |
ON Stored_procedure |
用户获准用指定的许可访问的存储过程名 |
续 表
ON Extended_stored procedure |
用 户 获 准 用 指 定 的 许 可 访 问 的 扩 展 存 储 过程名 |
下 表 指 定 了 当 用 户 提 供 与 语 句 许 可 相 对 应 的 对 象 许 可 时 的 特 定 对 象 的 许可 。
对象名 |
对象名的许可 |
---|---|
表或视图许可 |
SELECT 、INSERT 、DELETE 、UPDATE 、REFERENCES |
扩展存储过程许可 |
EXECUTE |
列许可 |
SELECT 、 UPDATE |
存储过程许可 |
EXECUTE |
下 面 是 使 用 对 象 许 可 的 GRANT 语 句 的 实 例 : GRANT EXECUTE
ON storedprocedurename TO security_account
W ITH GRANT OPTION G O
GRANT SELECT , UPDATE
ON tablename TO public
G O
GRANT SELECT ON tablename TO user AS rolename
G O
授 予 许 可 的 特 殊 规 则
在 授 予 许 可 时 需 注 意 以 下 特 定 规 则 :
-
如 果 用 户 要 用 FOREIGN KEY 约 束 在 表 中 插 入 或 修 改 行 , 且
对 该 表 或 相应 列 没 有 SELECT 许 可 , 则 对 此 表 必 须 使 用 REFERENCES 列 (column) 许可
-
并 非 所 有 语 句 都 需 要 有 许 可 才 能 使 用 。 确 实 需 要 许 可
的 语 句 可 为 数 据 库增 加 对 象 , 或 管 理 数 据 库
-
用 户 不 能 授 予 某 些 Transact-SQL 语 句 的 许 可 。 这 些 语 句
必 须 获 得 特 定 系统 角 色 ( 如 sysadmin) 中 的 成 员 的 许 可 , 只 有 这 些 人 能 用 SHUTDOWN 语 句 关 闭数 据 库
-
语 句 许 可 由 角 色 打 破 。某 些 角 色 拥 有 执 行 某 些 语 句 的
许 可 ,例 如 ,CREATE DATABASE 许 可 是 sysadmin 角 色 的 缺 省 许 可
-
选 项 W ITH GRANT 只 用 于 对 象 许 可
-
如 果 有 sysadmin 或 db_owner 角 色 , 可 使 用 SETUSER 测 试 许 可
, 以 便扮 演 另 一 个 用 户 来 查 看 是 否 已 提 供 了 正 确 的 许 可
-
在 授 予 许 可 时 可 将 行 插 入 到 sysprotects 系 统 表 中
-
使 用 sp_helprotect 存 储 过 程 , 可 查 看 某 个 对 象 或 用 户 的 许 可
REVOKE 语 句
REVOKE 语 句 可 用 于 删 除 授 予 的 许 可 , 或 撤 销 对 被 否 定 许 可 的 否 定 。语 句 许 可 的 REVOKE 语 法 如 下 :
REVOKE { ALL | statemen t[ ,... ]} FROM security_account [ ,...]
对 象 许 可 的 REVOKE 语 法 为 : REVOKE [ GRANT OPTION FO R ]
{ ALL [ PRIVILEGES ] | permission [ ,... ]}
{{[ (colum n[ ,...n ] )] ON { table | view }
| { procedure | extended_procedure }}
FROM security_account [ ,...] [ CASCAD E ]
[ A S { group | role }]
下 表 为 REVOKE 语 句 的 自 变 量 及 其 说 明 。
REVOKE 自变量 |
描述 |
---|---|
ALL |
对象 (Object):当 ALL 用于撤消某个对象的许可时,可删去对该对象的所有许可语句 (Statement): 当 用 作 语 句 许 可时,可删去语句的所有授予或拒绝的许可。在撤消所有语 句 许 可 的 情 况 下 , 只 有 System Administrator(SA) 和Database Owner(DBO )才 能 撤 消 所 有 的 许 可 , 因 为 只 有他们才拥有 SA 的所有权限,当然, SA 拥有的许可比DBO 更 多 , 因 为 SA 适于服务器范围, D B O 适于数据 库范围 |
Statement |
如 果 撤 消 许 可 的 用 户 是 SA , 则 可 使 用 CREATE DATABASE 。 如 果 用 户 不 是 SA , 则 可 从 另 一 个 用 户 撤消 CREATE DEFAULT 、 CREATE PROCEDURE 、CREATE RULE 、 CREATE TABLE 、 CREATE VIEW 、DUMP DATABASE 和 DUMP TRANSACTION 。该操作 可撤消授予的或拒绝的许可 |
Security_account |
从 该 用 户 中 撤 消 许 可 。 安 全 帐 户 可 以 是 M icrosoft SQL Server User、 SQL Server Role 、 Windows NT User 或 Windows NT Group |
GRANT OPTION FOR |
删去 W ITH GRANT OPTION 的效果。用户不再能给其 它用户授予 WITH GRANT OPTION ,但将保留自己的许可 |
PRIVILEGES |
该自变量不做要求,但对 ANSI 兼容机可包含该自变量 |
AS{group | role} |
该自变量表明撤销权限的用户处于的组或角色。如果撤 消人处在多个角色中,可能会发生权限冲突,该用户可以指明哪个角色或组拥有撤消这些许可的权限 |
续 表
Permission |
对象许可被撤消 Table 许可被撤销的表格名称 |
---|---|
Column |
许可被撤销的列名 |
View |
许可被撤销的视图名称 |
Stored procedure |
许可被撤销的存储过程名称 |
Extended stored procedure |
许可被撤销的扩展存储过程名 |
FROM |
指明安全帐户列表 |
CASCADE |
从安全帐户中删除许可,同时从已授予特权的所有安全帐户中删除许可 |
在 撤 消 许 可 时 要 注 意 下 列 特 殊 规 则 :
-
不 要 试 图 从 系 统 角 色 中 撤 消 许 可
-
如 果 在 从 已 授 予 W ITH GRANT OPTION 许 可 的 用 户 中 撤 消 许
可 时
CASCADE 不 用 作 自 变 量 , 则 返 回 错 误 消 息
- 在 发 出 撤 消 语 句 时 , sysprotects 系 统 表 中 有 一 行 被 删 除
REVOKE 语 句 的 几 个 实 例 如 下 :
REVOKE CREATE TABLE FROM security_account G O
REVOKE CREATE TABLE
FROM DomainNam e\ SecurityAccount G O
要 撤 消 (REVOKE ) 某 个 拒 绝 的 许 可 , 可 执 行 下 面 的 程 序 : REVOKE INSERT ON tablename
FROM security_account G O
DENY 语 句
发 出 拒 绝 命 令 可 防 止 用 户 获 得 组 或 角 色 成 员 的 许 可 , 并 在 sysprotects 系 统表 中 增 加 一 行 , 表 示 用 户 在 撤 消 DENY 之 前 不 能 获 得 许 可 。
语 句 许 可 的 DENY 语 法 如 下 :
DENY { ALL | statemen t[ ,... ]} TO security_accoun t[ ,...]
对 象 许 可 的 DENY 语 法 如 下 :
DENY { ALL [ PRIVILEGES ] | permission [ ,...n ]}
{[ (colum n[ ,...] )] ON { table | view }
| ON { table | view }[ ( colum n[ ,...] )]
| { procedure | extended_procedure }} TO security_account
[ CASCADE ]
下 表 表 示 DENY 语 句 的 自 变 量 及 其 描 述 :
DENY 自变量 |
描述 |
---|---|
ALL |
对象 (Object): 当 ALL 用 于 拒 绝 某 个 对 象 的 用 户 许 可 时 , 可 拒 绝 该 对象 的 所 有 许 可 语 句 (Statement): 当 用 作 语 句 许 可 时 , 可 消 除 使 用 所 有语 句 的 能 力 。 在 拒 绝 所 有 语 句 许 可 的 情 况 下 , 只 有 System Administrator(SA )和 Database Owner(DBO )才能拒绝所有许可,因为只有他们才拥有 SA 的所有权限,当然, SA 拥有的权限比 D B O 要 多,因为 SA 适于服务器范围, DBO 适于数据库范围 |
Statement |
如果拒绝许可的用户是 SA ,则可使用 CREATE DATABASE 。 如 果用户不是 SA ,则对另一个用户可拒绝 CREATE DEFAULT 、 CREATE PRO-CEDUR E、 GREATE RULE 、 CREATETABLE 、 CREATE VIEW 、DUMP DATABASE 和 DUMP TRANSACTION 。该操作可拒绝使用 该语句的用户许可 |
Security_account |
对该用户拒绝许可。该用户可以是 Microsoft SQL Server User 、 SQL Server Role 、 Windows NT User 或 Windows NT Group |
PRIVILEGES |
该自变量可不作要求,但对 ANSI 兼容机可包括该自变量 |
A S { group | role } |
该 自 变 量 表 明 拒 绝 权 限 的 用 户 所 处 的 组 或 角 色 。 如 果 拒 绝 人 处 于 多种 角 色 中 , 则 可 能 出 现 许 可 冲 突 , 该 用 户 可 以 指 明 哪 个 角 色 或 组 有 权拒绝这些许可 |
Permission |
被拒绝的对象许可或语句许可 |
Table |
许可遭到拒绝的表格名 |
Column |
许可遭到拒绝的列名 |
View |
许可遭到拒绝的视图名称 |
Stored_procedure |
许可遭到拒绝的存储过程名 |
Extended_procedu re |
许可遭到拒绝的扩展存储过程名 |
续 表
TO |
指明用户列表 |
---|---|
CASCADE |
拒 绝 对 该 用 户 的 许 可 , 对 已 授 予 许 可 的 用 户 拒 绝 所 有 用 户 的 许 可 , 以及拒绝对授予许可的所有用户的许可,等等 |
在 拒 绝 许 可 时 要 注 意 如 下 规 则 :
-
如 果 拒 绝 单 个 用 户 , 即 使 这 些 用 户 以 后 添 加 到 具 有 许
可 的 组 中 , 这 些 用户 也 将 得 不 到 许 可
-
使 用 REVOKE 可 删 去 用 户 的 拒 绝 许 可
-
在 发 出 拒 绝 语 句 时 , sysprotects 系 统 表 插 入 一 行使 用
DENY 语 句 的 实 例 如 下 :
DENY SELECT, INSERT, UPDATE, DELETE
ON tablename
TO security_account G O
DENY CREATE TABLE TO rolename
G O
要 改 变 某 个 对 象 在 Microsoft Management Console 中 的 许 可 , 可 执 行 以 下 步
骤 :
-
展 开 服 务 器 名 。
-
展 开 数 据 库 , 然 后 展 开 特 殊 数 据 库 名 。
-
在 范 围 面 板 中 选 择 对 象 类 型 。
-
在 结 果 面 板 中 右 击 该 对 象 。
-
选 择 Task , 再 选 择 Manage Permissions 。
-
选 择 List All Users / DB Roles 。
-
选 择 想 要 改 变 的 许 可 。
-
实 现 安 全 性 的 若 干 建 议
-
数 据 库 管 理 员 要 实 现 安 全 性 , 可 采 取 的 措 施 如 下 :
-
确 定 每 个 用 户 有 唯 一 的 注 册 ID 。 创 建 一 个 注 册 ID , 并
允 许 许 多 用 户 用该 注 册 ID 访 问 数 据 库 , 但 并 不 是 一 个 很 好 的 安 全 系 统 , 因 为 无 法 跟 踪 是 谁 在 数据 库 中 正 在 做 什 么
-
设 置 组 和 角 色 , 统 一 管 理 用 户 。 这 将 削 减 管 理 安 全 性
的 额 外 开 销 , 更 有利 于 确 保 访 问 的 精 确 性 和 标 准 化
-
使 DBO 成 为 所 有 数 据 库 对 象 的 拥 有 者
-
最 好 通 过 使 用 存 储 过 程 使 用 户 执 行 所 有 的 插 入 、 更 新
和 删 除 操 作 。 只 需通 过 Transact-SQL 就 拥 有 更 高 级 的 控 制 , 并 准 确 了 解 用 户 对 数 据 所 做 的 操 作
-
触 发 程 序 可 用 来 防 止 对 数 据 的 意 外 访 问 , 从 而 防 止 不 理 想 的 写 入 操 作
-
对 于 SA 访 问 , 可 把 单 个 用 户 放 在 sysadmin 角 色 中
-
用 公 司 的 组 织 图 表 把 访 问 许 可 分 成 多 个 功 能 角 色
所 有 权 链
对 象 可 依 赖 于 其 他 对 象 , 这 种 依 赖 性 称 为 ownership chain( 所 有 权 链 )。 如 果用 户 拥 有 全 部 对 象 及 其 从 属 对 象 , 那 就 万 事 俱 备 。 然 而 , 正 是 在 用 户 还 未 拥 有视 图 或 存 储 过 程 所 引 用 或 需 要 的 全 部 对 象 时 , 事 情 开 始 变 得 复 杂 , 这 种 情 况 称为 断 开 的 所 有 权 链 。 SQL Server 可 检 测 链 中 每 个 对 象 的 许 可 , 该 链 的 下 一 个 链接 由 另 一 个 用 户 所 拥 有 。
如 果 用 户 授 予 其 他 人 许 可 , 以 使 用 内 含 同 一 个 用 户 拥 有 的 表 的 视 图 及 存 储过 程 , 那 么 可 不 必 为 该 视 图 或 存 储 过 程 中 所 引 用 的 单 个 表 格 授 予 许 可 。
5.7xp_cmdshell
xp_cmdshell 可 将 给 定 的 命 令 串 作 为 操 作 系 统 命 令 的 外 壳 来 执 行 , 并 允 许 用户 执 行 SQL Server 内 部 的 NT 命 令 。
xp_cmdshell { ′ command_string ′ } [ , no_outpu t] 下 表 表 示 xp_cmdshell 自 变 量 及 其 描 述 :
应 在 某 种 环 境 下 评 价 xp_cmdshell 的 使 用 , 在 这 种 环 境 下 , 目 的 是 控 制 服 务器 上 或 N T 域 中 对 操 作 系 统 文 件 的 访 问 。 下 列 各 项 目 指 明 可 能 发 生 的 安 全 性 风险 :
-
如 果 运 行 M icrosoft SQL Server 的 帐 户 被 授 予 了 许 多 许 可
, 如 域 管 理 员 , 那 么 任 何 被 授 予 执 行 xp_cmdshell 的 许 可 的 用 户 , 都 将 能 用 运 行 Microsoft SQL Server 的 帐 户 特 权 来 执 行 任 何 操 作 系 统 命 令 。 缺 省 值 是 具 有 本 地 管 理 特 权 的 用户 帐 户 , 但 是 , 如 果 该 帐 户 具 有 域 管 理 员 特 权 , 则 整 个 域 都 可 显 示 出 来
-
要 限 制 xp_cmdshell 访 问 ,可在 Microsoft SQL Server 设 置 程 序
中 设 置 xp_ cmdshell-Impersonates Client 选 项 。 当 该 复 选 框 处 于 复 选 状 态 时 , 只 有 已 通 过 受托 连 接 连 接 到 SQL Server 的 用 户 , 和 该 计 算 机 上 本 地 Administrators 组 的 成 员才 允 许 使 用 xp_cmdshell 。 当 某 个 非 SA 用 户 用 Impersonates Client 选 项 集 执 行xp_cmdshell 时 , 就 在 SQLServerAgentCmdExec 用 户 帐 户 中 运 行 要 求 的 命 令 , 该 用 户 帐 户 与 SQL Server Agent 为 由 所 有 非 SA 用 户 输 入 的 调 度 任 务 而 使 用 的帐 户 相 同
-
如 果 选 择 了 选 项 xp_cmdshell-Use SQLServerAgentCmdExec Account
for NonAA s,并 且 用 户 是 作 为 SA 注 册 到 SQL Server 中 的 ,则 该 命 令 可 在 SQL Server 的 安 全 性 下 执 行 , 而 不 是 在 SQLServerAgentCmdExec 的 安 全 性 下 执 行 的 使 用QueryAnalyzer 可 执 行 xp_cmdshell 扩 展 存 储 过 程 ,Query Analyzer 可 从 Enterprise M anager Tools 菜 单 中 调 用 ( 如 图 5.8 所 示 )。
图 5.8 用来执行 xp_cmdshell 的 Query Analyzer