5.6. 権限

データベースオブジェクトを作成すると、作成者はその所有者となります。 デフォルトでは、オブジェクトの所有者のみがオブジェクトに対して操作を行うことができます。 他のユーザがこのオブジェクトを使用するには、権限が付与されていなければなりません。 (しかし、スーパーユーザ属性を持つユーザはいつでも、どのようなオブジェクトにでもアクセスできます。)

権限にはいくつかの種類があります。 すなわちSELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERCREATECONNECTTEMPORARYEXECUTEUSAGEです。 特定のオブジェクトに適用する特権は、オブジェクトの型(テーブル、関数など)により変わります。 PostgreSQLがサポートする様々な権限の詳細についてはGRANTリファレンスページを参照してください。 以降の節および章でもこれらの権限の使用方法についての説明があります。

オブジェクトの変更や削除の権限は常に所有者のみに与えられるものです。

注意: テーブル、インデックス、シーケンスまたはビューの所有者を変更するには、ALTER TABLEコマンドを使用してください。 他の種類のオブジェクトについては対応するALTERコマンドがあります。

権限を割り当てるには、GRANTコマンドを使用します。 例えば、joeという既存のユーザとaccountsという既存のテーブルがある場合、このテーブルを更新する権限を付与するには以下のようにします。

GRANT UPDATE ON accounts TO joe;

特定の権限名を指定する代わりにALLを指定すると、その種類のオブジェクトに関連する全ての権限が付与されます。

システム内の全てのユーザに権限を付与するには、特別な"ユーザ"名であるPUBLICを使用することができます。 また、"グループ"ロールを使用すれば、データベース内に多くのユーザが存在する場合に権限の管理が簡単になります。 詳細は第20章を参照してください。

権限を取り消す(revoke)には、それに相応しい名前のREVOKEコマンドを使用します。

REVOKE ALL ON accounts FROM PUBLIC;

オブジェクト所有者の特別の権限(DROPGRANTREVOKEを行う権限など)は、所有者であることを前提とした権限なので、付与したり取り消したりすることはできません。 しかしオブジェクト所有者は、テーブルを他のユーザ同様に自分自身に対しても読み取り専用にしたい時などに、自分の通常の権限を取り消すことができます。

普通はオブジェクトの所有者(またはスーパーユーザ)は、オブジェクトにおける権限の付与や剥奪ができます。 しかし"with grant option"を付けることで、権限を与えられたユーザが、所有者と同様に他のユーザに権限を付与することが可能になります。 もし後になってグラントオプションが剥奪されると、剥奪されたユーザから(直接もしくは権限付与の連鎖により)権限を与えられていたユーザはすべて、その権限が剥奪されます。 詳細は、GRANTREVOKEを参照してください。