GRANT

Name

GRANT  --  ユーザ、グループあるいはすべてのユーザにアクセス権限を与える

Synopsis

GRANT privilege [, ...] ON object [, ...]
    TO { PUBLIC | GROUP group | username }
  

入力

privilege

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

SELECT

特定のテーブル/ビュー内のすべてのカラムにアクセス可能 にします。

INSERT

特定のテーブル内のすべてのカラムにデータを挿入可能に します。

UPDATE

特定のテーブル内のすべてのカラムを更新可能にします。

DELETE

特定のテーブルの行を削除可能にします。

RULE

テーブル/ビューにルール (CREATE RULE 文を参照) を定義 します。

ALL

すべての権限を与えます。

object

アクセス権限を与えるオブジェクトの名前。 使用可能なオブジェクトは以下の物です:

  • テーブル (table)

  • ビュー (view)

  • シーケンス (sequence)

  • インデックス (index)

PUBLIC

全てのユーザを意味する短縮形です。

GROUP group

権限を与える グループ名 。 現在のバージョンでは、グループは後述されるように 明示的に作成されなければなりません。

username

権限を与えるユーザ名。PUBLIC はすべてのユーザを表現する 短縮形です。

出力

CHANGE

成功した場合に出力されるメッセージ。

ERROR: ChangeAcl: class "object" not found

指定したオブジェクトが利用できない、あるいは指定した グループまたはユーザに対して権限を与えることができない場合に 出力されるメッセージ。

説明

GRANT はオブジェクトの作成者にすべての ユーザ (PUBLIC) 、あるいはいくつかのユーザまたはグループに 対し、特定の権限を与えることを許します。 作成者以外のユーザは、作成者がオブジェクトを作成後、権限を GRANTで与えない限り、どんなアクセス権限も持っていません。

ひとたびユーザがオブジェクトに限権を所有すると、ユーザは、 その権限を行使することができるようになります。 オブジェクトの作成者には権限を与える必要はありません。作成者は 自動的にすべての権限を持っており、さらにそのオブジェクトを削除 することもできます。

注意

現在は、Postgres のいくつかの カラムだけに権限を与えるためには、対象となるカラムを持つ ビューを作成してから、そのビューに対し権限を与えなくては なりません。

既存のオブジェクトに対する権限についての詳しい情報を知るには psql \z を使います:

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

                    r -- SELECT
                    w -- UPDATE/DELETE
                    a -- INSERT
                    R -- RULE
                 arwR -- ALL
    

Tip: 現在、GROUP (グループ) を作成するには、pg_group テーブルに 手作業でデータを追加しなければなりません:

INSERT INTO pg_group VALUES ('todos');
CREATE USER miriam IN GROUP todos;
      

アクセス権限を取り上げるには、REVOKE 文を参照してください。

使用法

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

GRANT INSERT ON films TO PUBLIC;
   

ビュー kinds の全ての権限を、ユーザ manuel に与える:

GRANT ALL ON kinds TO manuel;
   

互換性

SQL92

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

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

設定項目は Postgres に実装されている物と 互換性があり、さらに以下のような物も付加されています:

privilege

SQL92 は、以下のような追加の権限の 指定も認めています:

SELECT

REFERENCES

一貫性制約の中で、指定した テーブル/ビューのいくつか あるいは全てのカラムを参照することを許します。

USAGE

ドメイン、文字セット、照合あるいは翻訳を使うことを 許します。 もし対象がテーブルまたはビュー以外のものを指定する場合 privilege には USAGE だけを指定しなくてはなりません。

object

[ TABLE ] table

SQL92 では、TABLE という追加の、関数では無いキーワードを許します。

CHARACTER SET

指定の文字セットを使うことを許します。

COLLATION

指定の照合順を使うことを許します。

TRANSLATION

指定した文字セット翻訳の使用を許します。

DOMAIN

指定したドメインを使うことを許します。

WITH GRANT OPTION

権限を与えられたユーザが、さらに他のユーザにも 同じ権限を与えることを許します。