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)

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"}      |
   +------------------+---------------------------------------------+
   Legend:
         uname=arwR -- privileges granted to a user
   group gname=arwR -- privileges granted to a GROUP
              =arwR -- privileges granted to PUBLIC

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

アクセス権限を取り上げるには、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

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