Provided by: manpages-zh_1.6.3.3-1_all bug

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@pgsqldb.org>

       本頁面中文版由中文 man 手冊頁計劃提供。
       中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh