Manpages

NAME

GRANT - 定 义 访 问 权 限

SYNOPSIS

GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] tablename [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE dbname [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTION funcname ([type, ...]) [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE langname [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schemaname [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]

DESCRIPTION 描 述

GRANT 命 令 将 某 对 象 ( 表 , 视 图 , 序 列 , 函 数 过 程 语 言 , 或 者 模 式 ) 上 的 特 定 权 限 给 予 一 个 用 户 或 者 多 个 用 户 或 者 一 组 用 户 。 这 些 权 限 将 增 加 到 那 些 已 经 赋 予 的 权 限 上 , 如 果 存 在 这 些 权 限 的 话 。 键 字 PUBLIC 表 示 该 权 限 要 赋 予 所 有 用 户 , 包 括 那 些 以 后 可 能 创 建 的 用 户 。 PUBLIC 可 以 看 做 是 一 个 隐 含 定 义 好 的 组 , 它 总 是 包 括 所 有 用 户 。 任 何 特 定 的 用 户 都 将 拥 有 直 接 赋 予 他 /她 的 权 限 , 加 上 他 /她 所 处 的 任 何 组 , 以 及 再 加 上 赋 予 PUBLIC 的 权 限 的 总 和 。 如 果 声 明 了 WITH GRANT OPTION, 那 么 权 限 的 受 予 者 也 可 以 赋 予 别 人 。 缺 省 的 时 候 这 是 不 允 许 的 。 赋 权 选 项 只 能 给 独 立 的 用 户 , 而 不 能 给 组 或 者 PUBLIC。 对 对 象 的 所 有 者 ( 通 常 就 是 创 建 者 ) 而 言 , 没 有 什 么 权 限 需 要 赋 予 , 因 为 所 有 者 缺 省 就 持 有 所 有 权 限 。 ( 不 过 , 所 有 者 出 于 安 全 考 虑 可 以 选 择 废 弃 一 些 他 自 己 的 权 限 。 ) 删 除 一 个 对 象 的 权 力 , 或 者 是 任 意 修 改 它 的 权 力 都 不 是 可 赋 予 的 权 利 所 能 描 述 的 ; 它 是 创 建 者 固 有 的 , 并 且 不 能 赋 予 或 撤 销 。 根 据 对 象 的 不 同 , 初 始 的 缺 省 权 限 可 能 包 括 给 PUBLIC 赋 予 一 些 权 限 。 缺 省 设 置 对 于 表 和 模 式 是 没 有 公 开 访 问 权 限 的 ; TEMP 表 为 数 据 库 创 建 权 限 ; EXECUTE 权 限 用 于 函 数 ; 以 及 USAGE 用 于 语 言 。 对 象 所 有 者 当 然 可 以 撤 回 这 些 权 限 。 ( 出 于 最 大 安 全 性 考 虑 , 在 创 建 该 对 象 的 同 一 个 事 务 中 发 出 REVOKE; 那 么 就 不 会 打 开 给 别 的 用 户 使 用 该 对 象 的 窗 口 。 ) 可 能 的 权 限 有 :

SELECT 允 许 对 声 明 的 表 , 试 图 , 或 者 序 列

SELECT [select(7)] 任 意 字 段 。 还

允 许 做 COPY [copy(7)] TO 的 源 。 对 于 序 列 而 言 , 这 个 权 限 还 允 许 使 用 currval 函 数 。

INSERT 允 许 向 声 明 的 表

INSERT [insert(7)] 一 个 新 行 。 同 时 还 允 许 做 COPY

[copy(7)] FROM。

UPDATE 允 许 对 声 明 的 表 中 任 意 字 段 做

UPDATE [update(7)] 。 SELECT ... FOR

UPDATE 也 要 求 这 个 权 限 ( 除 了 SELECT 权 限 之 外 ) 。 比 如 , 这 个 权 限 允 许 使 用 nextval 和 setval。

DELETE 允 许 从 声 明 的 表 中

DELETE [delete(7)] 行 。

RULE 允 许 在 该 表

/视 图 上 创 建 规 则 。 ( 参 阅 CREATE RULE [create_rule(7)] 语 句 。 )
REFERENCES
要 创 建 一 个 外 键 约 束 , 你 必 须 在 参 考 表 和 被 参 考 表 上 都 拥 有 这 个 权 限 。
TRIGGER
允 许 在 声 明 表 上 创 建 触 发 器 。 ( 参 阅 CREATE TRIGGER [create_trigger(7)] 语 句 。 )

CREATE 对 于 数 据 库 , 允 许 在 该 数 据 库 里 创 建 新 的 模 式 。 对 于 模 式 , 允 许 在 该 模 式 中 创 建 新 的 对 象 。 要 重 命 名 一 个 现 有 对 象 , 你 必 需 拥 有 该 对 象 并 且 。 对 包 含 该 对 象 的 模 式 拥 有 这 个 权 限 。

TEMPORARY

TEMP 允 许 在 使 用 该 数 据 库 的 时 候 创 建 临 时 表 。

EXECUTE 允 许 使 用 指 定 的 函 数 并 且 可 以 使 用 任 何 利 用 这 些 函 数 实 现 的 操 作 符 。 这 是 适 用 于 函 数 的 唯 一 的 一 种 权 限 类 型 。 ( 该 语 法 同 样 适 用 于 聚 集 函 数 。 )

USAGE 对 于 过 程 语 言 , 允 许 使 用 指 定 过 程 语 言 创 建 该 语 言 的 函 数 。 这 是 适 用 于 过 程 语 言 的 唯 一 的 一 种 权 限 类 型 。 对 于 模 式 , 允 许 访 问 包 含 在 指 定 模 式 中 的 对 象 ( 假 设 该 对 象 的 所 有 权 要 求 同 样 也 设 置 了 ) 。 最 终 这 些 就 允 许 了 权 限 接 受 者

"查 询 "模 式 中 的 对 象 。
ALL PRIVILEGES
一 次 性 给 予 所 有 适 用 于 该 对 象 的 权 限 。 PRIVILEGES 关 键 字 在 PostgreSQL 里 是 可 选 的 , 但 是 严 格 的 SQL 要 求 有 这 个 关 键 字 。 其 它 命 令 要 求 的 权 限 都 在 相 应 的 命 令 的 参 考 页 上 列 出 。

NOTES 注 意

REVOKE [revoke(7)] 命 令 用 于 删 除 访 问 权 限 。 我 们 要 注 意 数 据 库 超 级 用 户 可 以 访 问 所 有 对 象 , 而 不 会 受 对 象 的 权 限 设 置 影 响 。 这 个 特 点 类 似 Unix 系 统 的 root 的 权 限 。 和 root 一 样 , 除 了 必 要 的 情 况 , 总 是 以 超 级 用 户 身 分 进 行 操 作 是 不 明 智 的 做 法 。

If a superuser chooses to issue a GRANT or REVOKE command, the command is performed as though it were issued by the owner of the affected object. In particular, privileges granted via such a command will appear to have been granted by the object owner. 目 前 , 要 在 PostgreSQL 里 只 对 某 几 列 赋 予 权 限 , 你 必 须 创 建 一 个 拥 有 那 几 行 的 视 图 然 后 给 那 个 视 图 赋 予 权 限 。 使 用 psql(1)\z 命 令 获 取 在 现 有 对 象 上 的 与 权 限 有 关 的 信 息 。

=> \z mytable

Access privileges for database "lusitania"
Schema | Table | Access privileges
--------+---------+---------------------------------------
public | mytable | {=r/postgres,miriam=arwdRxt/postgres,"group todos=arw/postgres"}
(1 row)

\z 显 示 的 条 目 解 释 如 下 :

=xxxx -- 赋 予 PUBLIC 的 权 限
uname=xxxx -- 赋 予 一 个 用 户 的 权 限
group gname=xxxx -- 赋 予 一 个 组 的 权 限

r -- SELECT ("读 ")
w -- UPDATE ("写 ")
a -- INSERT ("追 加 ")
d -- DELETE
R -- RULE
x -- REFERENCES
t -- TRIGGER
X -- EXECUTE
U -- USAGE
C -- CREATE
T -- TEMPORARY
arwdRxt -- ALL PRIVILEGES (for tables)
* -- 给 前 面 权 限 的 授 权 选 项

/yyyy -- 授 出 这 个 权 限 的 用 户 用 户 miriam 在 建 完 表 之 后 再 做 下 面 的 语 句 , 就 可 以 得 到 上 面 例 子 的 结 果

GRANT SELECT ON mytable TO PUBLIC;
GRANT SELECT, UPDATE, INSERT ON mytable TO GROUP todos; 如 果 一 个 给 定 的 对 象 的 "Access privileges" 字 段 是 空 的 , 这 意 味 着 该 对 象 有 缺 省 权 限 ( 也 就 是 说 , 它 的 权 限 字 段 是 NULL) 。 缺 省 权 限 总 是 包 括 所 有 者 的 所 有 权 限 , 以 及 根 据 对 象 的 不 同 , 可 能 包 含 一 些 给 PUBLIC 的 权 限 。 对 象 上 第 一 个 GRANT 或 者 REVOKE 将 实 例 化 这 个 缺 省 权 限 ( 比 如 , 产 生 {=,miriam=arwdRxt}) 然 后 根 据 每 次 特 定 的 需 求 修 改 它 。

EXAMPLES 例 子

把 表 films 的 插 入 权 限 赋 予 所 有 用 户 :

GRANT INSERT ON films TO PUBLIC; 赋 予 用 户 manuel对 视 图 kinds的 所 有 权 限 :

GRANT ALL PRIVILEGES ON kinds TO manuel;

COMPATIBILITY 兼 容 性

根 据 SQL 标 准 , 在 ALL PRIVILEGES 里 的 PRIVILEGES 关 键 字 是 必 须 的 。 SQL 不 支 持 在 一 条 命 令 里 对 多 个 表 设 置 权 限 。

SQL 标 准 允 许 在 一 个 表 里 为 独 立 的 字 段 设 置 权 限 :

GRANT privileges
ON table [ ( column [, ...] ) ] [, ...]
TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]

SQL 标 准 对 其 它 类 型 的 对 象 提 供 了 一 个 USAGE 权 限 : 字 符 集 , 校 勘 , 转 换 , 域 。

RULE 权 限 , 以 及 在 数 据 库 , 模 式 , 语 言 和 序 列 上 的 权 限 是 PostgreSQL 扩 展 。

SEE ALSO 参 见

REVOKE [revoke(7)]

译 者

Postgresql 中 文 网 站 何 伟 平 <laser [AT] pgsqldb.org>

本 页 面 中 文 版 由 中 文 man 手 册 页 计 划 提 供 。 中 文 man 手 册 页 计 划 : https://github.com/man-pages-zh/manpages-zh