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