第 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 章 与 W indows NT 安 全 性 的 集 成 - 图1

图 5.1 设置 Windows NT Authentication 模式

要 充 分 利 用 W indows NT 安 全 性 , 应 设 置 SQL Server 的 W indows NT Authentication Mode:

  1. 展 开 服 务 器 组 。

  2. 选 择 一 个 服 务 器 , 右 击 该 服 务 器 , 再 选 择 Properties 。

  3. 单 击 Security 标 签 。

  4. 只 选 择 W indows NT 或 选 择 SQL Server 和 W indows N T 。

  5. 选 择 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 章 与 W indows NT 安 全 性 的 集 成 - 图2

图 5.2 创建 Windows NT 验证注册 ID

  1. 展 开 服 务 器 名 。

  2. 右 击 Logins , 然 后 选 择 New Login 。

  3. 选 择 W indows NT Authentication 。

  4. 键 入 W indows NT 帐 户 。

  5. 设 置 用 户 的 缺 省 数 据 库 。

    1. 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 章 与 W indows NT 安 全 性 的 集 成 - 图3

  1. 展 开 服 务 器 名 。

图 5.3 创建 SQL Server 验证注册 ID

  1. 右 击 Logins , 然 后 选 择 New Login 。

  2. 选 择 SQL Server Authentication 。

  3. 键 入 注 册 名 和 密 码 。

  4. 为 用 户 选 择 缺 省 数 据 库 。

两 种 类 型 的 注 册 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 章 与 W indows NT 安 全 性 的 集 成 - 图4

图 5.4 创建新的数据库用户

  1. 展 开 服 务 器 , 并 选 择 数 据 库 。

  2. 右 击 该 数 据 库 ;

  3. 选 择 New , 然 后 再 选 择 New Database Use r。

  4. 选 择 注 册 名 。

  5. 键 入 用 户 名 。

  6. 选 择 要 放 入 用 户 的 角 色 。

  7. 单 击 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 章 与 W indows NT 安 全 性 的 集 成 - 图5

图 5.5 分配固定的服务器角色

使 用 M icrosoft M anagement Console 可 以 为 SQL Server 验 证 注 册 ID 把 用 户分 配 给 固 定 角 色 :

  1. 展 开 M M C 中 的 服 务 器 名 。

  2. 右 击 Logins , 然 后 选 择 New Login 。

  3. 选 择 SQL Server Authentication 。

  4. 键 入 SQL Server Authentication 或 NT 帐 户 或 W indows NT Authentication

用 户 的 注 册 名 和 密 码 。

  1. 设 置 用 户 的 缺 省 数 据 库 。

  2. 单 击 Server Roles 标 签 。

  3. 单 击 提 供 给 用 户 的 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 章 与 W indows NT 安 全 性 的 集 成 - 图6

图 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 章 与 W indows NT 安 全 性 的 集 成 - 图7

图 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 中 的 许 可 , 可 执 行 以 下 步

骤 :

  1. 展 开 服 务 器 名 。

  2. 展 开 数 据 库 , 然 后 展 开 特 殊 数 据 库 名 。

  3. 在 范 围 面 板 中 选 择 对 象 类 型 。

  4. 在 结 果 面 板 中 右 击 该 对 象 。

  5. 选 择 Task , 再 选 择 Manage Permissions 。

  6. 选 择 List All Users / DB Roles 。

  7. 选 择 想 要 改 变 的 许 可 。

    1. 实 现 安 全 性 的 若 干 建 议

数 据 库 管 理 员 要 实 现 安 全 性 , 可 采 取 的 措 施 如 下 :

  • 确 定 每 个 用 户 有 唯 一 的 注 册 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 章 与 W indows NT 安 全 性 的 集 成 - 图8

图 5.8 用来执行 xp_cmdshell 的 Query Analyzer