.\" auto-generated by docbook2man-spec $Revision: 1.1 $ .TH "GRANT" "7" "2003-11-02" "SQL - Language Statements" "SQL Commands" .SH NAME GRANT \- 定義訪問權限 .SH SYNOPSIS .sp .nf GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] \fItablename\fR [, ...] TO { \fIusername\fR | GROUP \fIgroupname\fR | PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE \fIdbname\fR [, ...] TO { \fIusername\fR | GROUP \fIgroupname\fR | PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTION \fIfuncname\fR ([\fItype\fR, ...]) [, ...] TO { \fIusername\fR | GROUP \fIgroupname\fR | PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE \fIlangname\fR [, ...] TO { \fIusername\fR | GROUP \fIgroupname\fR | PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA \fIschemaname\fR [, ...] TO { \fIusername\fR | GROUP \fIgroupname\fR | PUBLIC } [, ...] [ WITH GRANT OPTION ] .sp .fi .SH "DESCRIPTION 描述" .PP \fBGRANT\fR 命令將某對象(表,視圖,序列,函數過程語言,或者模式) 上的特定權限給予一個用戶或者多個用戶或者一組用戶。 這些權限將增加到那些已經賦予的權限上,如果存在這些權限的話。 .PP 鍵字 PUBLIC 表示該權限要賦予所有用戶, 包括那些以後可能創建的用戶。PUBLIC 可以看做是一個隱含定義好的組,它總是包括所有用戶。 任何特定的用戶都將擁有直接賦予他/她的權限,加上他/她所處的任何組, 以及再加上賦予 PUBLIC 的權限的總和。 .PP 如果聲明瞭 WITH GRANT OPTION,那麼權限的受予者也可以賦予別人。 缺省的時候這是不允許的。賦權選項只能給獨立的用戶,而不能給組或者 PUBLIC。 .PP 對對象的所有者(通常就是創建者)而言,沒有什麼權限需要賦予, 因爲所有者缺省就持有所有權限。(不過,所有者出於安全考慮可以選擇廢棄一些他自己的權限。) 刪除一個對象的權力,或者是任意修改它的權力都不是可賦予的權利所能描述的; 它是創建者固有的,並且不能賦予或撤銷。 .PP 根據對象的不同,初始的缺省權限可能包括給 PUBLIC 賦予一些權限。缺省設置對於表和模式是沒有公開訪問權限的; TEMP 表爲數據庫創建權限;EXECUTE 權限用於函數; 以及 USAGE 用於語言。對象所有者當然可以撤回這些權限。 (出於最大安全性考慮,在創建該對象的同一個事務中發出 REVOKE; 那麼就不會打開給別的用戶使用該對象的窗口。) .PP 可能的權限有: .TP \fBSELECT\fR 允許對聲明的表,試圖,或者序列 SELECT [\fBselect\fR(7)] 任意字段。還允許做 COPY [\fBcopy\fR(7)] TO 的源。 對於序列而言,這個權限還允許使用 currval 函數。 .TP \fBINSERT\fR 允許向聲明的表 INSERT [\fBinsert\fR(7)] 一個新行。 同時還允許做 COPY [\fBcopy\fR(7)] FROM。 .TP \fBUPDATE\fR 允許對聲明的表中任意字段做 UPDATE [\fBupdate\fR(7)] 。 SELECT ... FOR UPDATE 也要求這個權限 (除了 SELECT 權限之外)。比如, 這個權限允許使用nextval 和 setval。 .TP \fBDELETE\fR 允許從聲明的表中 DELETE [\fBdelete\fR(7)] 行。 .TP \fBRULE\fR 允許在該表/視圖上創建規則。(參閱 CREATE RULE [\fBcreate_rule\fR(7)] 語句。) .TP \fBREFERENCES\fR 要創建一個外鍵約束,你必須在參考表和被參考表上都擁有這個權限。 .TP \fBTRIGGER\fR 允許在聲明表上創建觸發器。(參閱 CREATE TRIGGER [\fBcreate_trigger\fR(7)] 語句。) .TP \fBCREATE\fR 對於數據庫,允許在該數據庫裏創建新的模式。 對於模式,允許在該模式中創建新的對象。 要重命名一個現有對象,你必需擁有該對象並且。 對包含該對象的模式擁有這個權限。 .TP \fBTEMPORARY\fR .TP \fBTEMP\fR 允許在使用該數據庫的時候創建臨時表。 .TP \fBEXECUTE\fR 允許使用指定的函數並且可以使用任何利用這些函數實現的操作符。 這是適用於函數的唯一的一種權限類型。 (該語法同樣適用於聚集函數。) .TP \fBUSAGE\fR 對於過程語言, 允許使用指定過程語言創建該語言的函數。 這是適用於過程語言的唯一的一種權限類型。 對於模式,允許訪問包含在指定模式中的對象(假設該對象的所有權要求同樣也設置了)。 最終這些就允許了權限接受者"查詢"模式中的對象。 .TP \fBALL PRIVILEGES\fR 一次性給予所有適用於該對象的權限。 PRIVILEGES 關鍵字在 PostgreSQL 裏是可選的, 但是嚴格的 SQL 要求有這個關鍵字。 .PP 其它命令要求的權限都在相應的命令的參考頁上列出。 .SH "NOTES 注意" .PP REVOKE [\fBrevoke\fR(7)] 命令用於刪除訪問權限。 .PP 我們要注意數據庫超級用戶可以訪問所有對象, 而不會受對象的權限設置影響。這個特點類似 Unix 系統的 root 的權限。和 root 一樣,除了必要的情況,總是以超級用戶身分進行操作是不明智的做法。 .PP If a superuser chooses to issue a \fBGRANT\fR or \fBREVOKE\fR 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. .PP 目前,要在 PostgreSQL 裏只對某幾列賦予權限, 你必須創建一個擁有那幾行的視圖然後給那個視圖賦予權限。 .PP 使用 \fBpsql\fR(1) 的 \fB\\z\fR 命令獲取在現有對象上的與權限有關的信息。 .sp .nf => \\z mytable Access privileges for database "lusitania" Schema | Table | Access privileges --------+---------+--------------------------------------- public | mytable | {=r/postgres,miriam=arwdRxt/postgres,"group todos=arw/postgres"} (1 row) .sp .fi \fB\\z\fR 顯示的條目解釋如下: .sp .nf =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 -- 授出這個權限的用戶 .sp .fi 用戶 miriam 在建完表之後再做下面的語句, 就可以得到上面例子的結果 .sp .nf GRANT SELECT ON mytable TO PUBLIC; GRANT SELECT, UPDATE, INSERT ON mytable TO GROUP todos; .sp .fi .PP 如果一個給定的對象的 "Access privileges" 字段是空的, 這意味着該對象有缺省權限(也就是說,它的權限字段是 NULL)。 缺省權限總是包括所有者的所有權限,以及根據對象的不同,可能包含一些給 PUBLIC 的權限。 對象上第一個 GRANT 或者 REVOKE 將實例化這個缺省權限(比如,產生 {=,miriam=arwdRxt}) 然後根據每次特定的需求修改它。 .SH "EXAMPLES 例子" .PP 把表 films 的插入權限賦予所有用戶: .sp .nf GRANT INSERT ON films TO PUBLIC; .sp .fi .PP 賦予用戶manuel對視圖kinds的所有權限: .sp .nf GRANT ALL PRIVILEGES ON kinds TO manuel; .sp .fi .SH "COMPATIBILITY 兼容性" .PP 根據 SQL 標準,在 ALL PRIVILEGES 裏的 PRIVILEGES 關鍵字是必須的。SQL 不支持在一條命令裏對多個表設置權限。 .PP SQL 標準允許在一個表裏爲獨立的字段設置權限: .sp .nf GRANT \fIprivileges\fR ON \fItable\fR [ ( \fIcolumn\fR [, ...] ) ] [, ...] TO { PUBLIC | \fIusername\fR [, ...] } [ WITH GRANT OPTION ] .sp .fi .PP SQL 標準對其它類型的對象提供了一個 USAGE 權限:字符集,校勘,轉換,域。 .PP RULE 權限,以及在數據庫,模式,語言和序列上的權限是 PostgreSQL 擴展。 .SH "SEE ALSO 參見" .PP REVOKE [\fBrevoke\fR(7)] .SH "譯者" .B Postgresql 中文網站 .B 何偉平 .SH "跋" .br 本頁面中文版由中文 man 手冊頁計劃提供。 .br 中文 man 手冊頁計劃:\fBhttps://github.com/man-pages-zh/manpages-zh\fR