★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 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

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を参照してください。