データベースオブジェクトが作成されるとその所有者が設定されます。所有者はその作成文を実行したユーザです。テーブル、インデックス、シーケンス、またはビューの所有者を変更するには、ALTER TABLE コマンドを使用します。デフォルトでは、所有者(もしくはスーパーユーザ)のみがそのオブジェクトに対して変更を加えることができます[1]。その他のユーザがオブジェクトを使うためには、権限が与えられていなければいけません。
いくつかの異なる権限があります。SELECT、INSERT、UPDATE、DELETE、RULE、REFERENCES、TRIGGER、CREATE、TEMPORARY、EXECUTE、USAGE、ALL PRIVILEGES です。 PostgreSQL でサポートされているさまざまな権限についての詳細情報は、PostgreSQL 7.3 リファレンスマニュアル の GRANT コマンドのページを参照して下さい。オブジェクトを変更、削除する権利は常に所有者のみの権限です。権限を与えるためには、GRANTコマンドが使われます。もし joe というユーザがいて accounts というテーブルがあった場合、このテーブルを更新する権限は下記のように与えることができます。
GRANT UPDATE ON accounts TO joe;
このコマンドを実行するユーザはそのテーブルの所有者でなければいけません。グループに権限を与える場合は以下のようにします。
GRANT SELECT ON accounts TO GROUP staff;
特別な"ユーザ"名PUBLICは、システム上のすべてのユーザに権限を与えるために使われます。指定する権限に ALLと記述すると、すべての権限が与えられます。
権限を無効にするためにはREVOKEコマンドを使います。
REVOKE ALL ON accounts FROM PUBLIC;
テーブル所有者の特別な権限(つまり DROP、GRANT、REVOKEなどを実行する権利)は常に暗黙的に所有者であることを示すものであり、許可することも取り去ることもできません。しかし、テーブル所有者は自身の通常の権限を取り去ることができます。 例えば、他のユーザと同じように所有者自身も読みとりのみのテーブルを作成することができます。
[1] | 訳注:バージョン7.1からはalter table文でテーブルの所有者権限が変更できるようになっています |