Provided by: manpages-zh_1.5-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 ]

DESCRIPTIONyz
       GRANT            命令將某對象(表,視圖,序列,函數過程語言,或者模式)
       上的特定權給予一茖洏峈怍峈怞h茖洏峈怍峈怳@組使用者。            這些權-
       將增加到那些已經賦予的權上,如果存在這些權的話。

        鍵字                  PUBLIC                  表示該權n賦予所有使用者,
       包括那些以後可能創建的使用者。PUBLIC                      可以看做是一-
       蚆籈t定義好的組,它總是包括所有使用者。
       任何特定的使用者都將擁有直接賦予他/她的權,加上他/她所處的任何組,
       以及再加上賦予 PUBLIC 的權的總和。

        如果聲明了 WITH GRANT OPTION,那麼權的受予者也可以賦予別人。 預設的時-
       堀o是不允許的。賦權選項只能給獨立的使用者,而不能給組或者 PUBLIC。

        對對象的所有者(通常就是創建者)而言,沒有什麼權需n賦予,
       因為所有者預設就持有所有權-
       。(不過,所有者出於安全考慮可以選擇廢棄一些他自己的權。)      刪除一-
       蚢龠H的權力,或者是任意蚹鴷扛瘍v力都不是可賦予的權利所能描z的;
       它是創建者固有的,並且不能賦予或撤銷。

        根據對象的不同,初始的預設權可能包括給       PUBLIC        賦予一些權-
       。預設設置對於表和模式是沒有公開訪問權的;    TEMP    表為數據庫創建權-
       ;EXECUTE             權用於函數;              以及              USAGE
       用於語言。對象所有者當然可以撤回這些權。
       (出於最大安全性考慮,在創建該對象的同一茖今o出            REVOKE;
       那麼就不會打開給別的使用者使用該對象的視窗。)

        可能的權有:

       SELECT       允許對聲明的表,試圖,或者序列      SELECT     [select(7)]
              任意字段。還允許做 COPY [copy(7)] TO 的源。 對於序列而言,這蚥v-
              還允許使用 currval 函數。

       INSERT   允許向聲明的表  INSERT [insert(7)] 一虓s行。 同時還允許做 COPY
              [copy(7)] FROM。

       UPDATE  允許對聲明的表中任意字段做 UPDATE [update(7)] 。 SELECT ... FOR
              UPDATE   也n求這蚥v   (除了   SELECT   權之外)。比如,  這蚥v-
              允許使用nextval 和 setval。

       DELETE  允許從聲明的表中 DELETE [delete(7)] 行。

       RULE    允許在該表/視圖上創建規則。(參閱 CREATE RULE  [create_rule(7)]
              語句。)

       REFERENCES
               n創建一茈~鍵約束,你必須在參考表和被參考表上都擁有這蚥v。

       TRIGGER
               允許在聲明表上創建觸發器。(參閱         CREATE         TRIGGER
              [create_trigger(7)] 語句。)

       CREATE  對於數據庫,允許在該數據庫裏創建新的模式。

               對於模式,允許在該模式中創建新的對象。                n咿R名一-
              茞{有對象,你必需擁有該對象並且。 對包含該對象的模式擁有這蚥v。

       TEMPORARY

       TEMP    允許在使用該數據庫的時堀衎媮{時表。

       EXECUTE
               允許使用指定的函數並且可以使用任何利用這些函數實現的操作符。
              這是適用於函數的唯一的一種權類型。
              (該語法同樣適用於聚集函數。)

       USAGE        對於過程語言,      允許使用指定過程語言創建該語言的函數。
              這是適用於過程語言的唯一的一種權類型。

               對於模式,允許訪問包含在指定模式中的對象(假設該對象的所有權-
              n求同樣也設置了)。 最終這些就允許了權接受者"查詢"模式中的對象。

       ALL PRIVILEGES
               一次性給予所有適用於該對象的權。 PRIVILEGES 關鍵字在 PostgreSQL
              裏是可選的, 但是嚴格的 SQL n求有這蚚鶬鉿r。

        其它命令n求的權都在相應的命令的參考隊W列出。

NOTES`N
       REVOKE [revoke(7)] 命令用於刪除訪問權。

        我帔注意數據庫超級使用者可以訪問所有對象,           而不會受對象的權-
       設置影響。這荅S點類似 Unix 系統的  root   的權。和  root  一樣,除了必-
       n的情況,總是以超級使用者角懦i行操作是不明智的做法。

       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.

        目前,n在      PostgreSQL      裏只對某幾列賦予權,      你必須創建一-
       蚞皉釣煽X行的視圖然後給那茧纗牮嶀怵v。

        使用 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 -- 賦予一茖洏峈怐瘍v
          group gname=xxxx -- 賦予一茞晡瘍v

                         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)
                         * -- 給前掬v的授權選項

                     /yyyy -- 授出這蚥v的使用者

        使用者 miriam 在建完表之後再做下悸獄y句, 就可以得到上惆狺l的結果

       GRANT SELECT ON mytable TO PUBLIC;
       GRANT SELECT, UPDATE, INSERT ON mytable TO GROUP todos;

        如果一茧鼎w的對象的       "Access       privileges"       字段是空的,
       這意味著該對象有預設權(也就是說,它的權字段是     NULL)。     預設權-
       總是包括所有者的所有權,以及根據對象的不同,可能包含一些給       PUBLIC
       的權。 對象上第一  GRANT  或者  REVOKE   將實例化這蚢w設權(比如,產生
       {=,miriam=arwdRxt}) 然後根據每次特定的需求蚹鴷式C

EXAMPLESl
        把表 films 的插入權賦予所有使用者:

       GRANT INSERT ON films TO PUBLIC;

        賦予使用者manuel對視圖kinds的所有權:

       GRANT ALL PRIVILEGES ON kinds TO manuel;

COMPATIBILITYe性
        根據  SQL 標準,在 ALL PRIVILEGES 裏的 PRIVILEGES  關鍵字是必須的。SQL
       不支持在一條命令裏對多茠穖]置權。

       SQL 標準允許在一茠薋堿倏W立的字段設置權:

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

       SQL 標準對其它類型的對象提供了一 USAGE 權:字符集,校勘,轉換,域。

       RULE 權,以及在數據庫,模式,語言和序列上的權是 PostgreSQL 擴展。

SEE ALSO見
       REVOKE [revoke(7)]

者
       Postgresql  <laser@pgsqldb.org>