他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

GRANT

Name

GRANT -- アクセス権限の定義

Synopsis

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

説明

GRANT コマンドは 1つもしくは複数のユーザまたはユーザグループに、あるオブジェクト(テーブル、ビュー、シーケンス)に関する特定の権限を与えます。これらの権限は、もしこれまでに許可された権限があった場合それに追加されます。

PUBLIC キーワードは、その権限が将来作成されるユーザを含む、全てのユーザに許可されることを示します。PUBLIC は全てのユーザを常に含む暗黙的に定義されたグループと考えることができます。ユーザは、直接そのユーザに許可された権限、ユーザが現在属しているグループに許可された権限、および、PUBLIC に許可された権限を合わせた権限を持つことになることに注意して下さい。

オブジェクトの作成者以外のユーザは、作成者が権限を許可しない限り、アクセス権限を全く持っていません。作成者は自動的に全ての権限を保持するため、オブジェクトの作成者に権限を許可する必要はありません。(しかし、作成者は安全のため自身の持つ権限の一部を取り上げることができます。権限の許可、取り上げは作成者固有の能力であり、作成者はその能力を失うことがないことに注意して下さい。オブジェクトを削除する権利も作成者固有のものですが、この権利は許可することも取り上げることもできません。)

設定可能な権限は以下のものです。

SELECT

指定したテーブル、ビュー、シーケンスの任意の列に対する SELECT を許可します。また、COPY FROM の使用も許可します。

INSERT

指定したテーブルへの新規行の INSERT を許可します。また、COPY TO の使用も許可します。

UPDATE

指定したテーブルの任意の列に対する UPDATE を許可します。 SELECT ... FOR UPDATE は(SELECT 権限に加え)この権限を必要とします。シーケンスでは、この権限により nextvalcurrvalsetval の使用を許可します。

DELETE

指定したテーブルから行の DELETE を許可します。

RULE

テーブルまたはビュー上のルールの作成を許可します。(CREATE RULE 文を参照して下さい。)

REFERENCES

外部キー制約を持つテーブルを作成するためには、被参照キーを持つテーブルに対してこの権限が必要です。

TRIGGER

指定したテーブル上のトリガの作成を許可します。(CREATE TRIGGER 文を参照して下さい。)

ALL PRIVILEGES

上述の全ての権限を一度に許可します。 PRIVILEGES キーワードは PostgreSQL では省略可能ですが、厳密な SQL では必須なものです。

他のコマンドで必要となる権限は、そのコマンドのリファレンスページにて示されています。

注釈

データベーススーパユーザのみが、オブジェクトに関する権限設定に関係なく、全てのオブジェクトにアクセスできることは注意しなければなりません。これは、Unix システムでの root 権限と同等なものですので、どうしても必要な場合以外でスーパユーザで操作を行なうことは愚かなことです。

現時点で、PostgreSQLで、一部の列にのみ権限を付与する方法は、対象とする列を持つビューを作成し、そのビューに対して権限を付与することです。

既存のオブジェクトの権限についての情報を得るには、 psql\z コマンドを使用して下さい。

          Database    = lusitania
   +------------------+---------------------------------------------+
   |  Relation        |        Grant/Revoke Permissions             |
   +------------------+---------------------------------------------+
   | mytable          | {"=rw","miriam=arwdRxt","group todos=rw"}   |
   +------------------+---------------------------------------------+
   凡例:
         uname=arwR -- ユーザに与えられた権限
   group gname=arwR -- グループに与えられた権限
              =arwR -- PUBLIC(全てのユーザ)に与えられた権限

                  r -- SELECT (読み取り(read))
                  w -- UPDATE (書き込み(write))
                  a -- INSERT (追加(append))
                  d -- DELETE
                  R -- RULE
                  x -- REFERENCES
                  t -- TRIGGER
            arwdRxt -- ALL PRIVILEGES

アクセス権限を取り上げるには、 REVOKEコマンドが使用されます。

テーブル films にデータを追加する権限を全てのユーザに与えます。

GRANT INSERT ON films TO PUBLIC;

ビュー kinds の全ての権限を、ユーザ manuel に与えます。

GRANT ALL PRIVILEGES ON kinds TO manuel;

互換性

SQL92

ALL PRIVILEGES内の PRIVILEGES は必須です。SQL では、1つのコマンドによって、複数のテーブルに権限を設定することをサポートしていません。

SQL92 の構文では、GRANT はテーブル中の個々の列に対して権限を設定すること、そして権限を与えられたユーザが同じ権限を他のユーザに与えることを許可しています。

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

SQL では、CHARACTER SET, COLLATION, TRANSLATION, DOMAIN といった別種類のオブジェクトに対して、USAGE 権限を付与することができます。

TRIGGER権限は SQL99 にて導入されました。RULE 権限は PostgreSQL の拡張です。

関連項目

REVOKE