PostgreSQL PRIVILEGES(権限)

データベースオブジェクトを作成するときは常に、そのオブジェクトに所有者が割り当てられます。所有者は通常、create文を実行した人です。

ほとんどの種類のオブジェクトでは、初期状態では所有者(またはスーパーユーザー)のみがオブジェクトを変更または削除できます。他のロールやユーザーが使用できるようにするには、そのユーザーに権限を設定する必要があります。

PostgreSQLでは、権限は以下の種類に分けられます:

  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • TRUNCATE
  • REFERENCES
  • TRIGGER
  • CREATE
  • CONNECT
  • TEMPORARY
  • EXECUTE
  • USAGE

オブジェクトの種類(テーブル、関数など)に応じて、指定された権限がそのオブジェクトに適用されます。

ユーザーに権限を割り当てるには、GRANTコマンドを使用できます。

GRANT 構文

GRANTコマンドの基本構文は次のとおりです:

GRANT privilege [, ...]
ON object [, ...]
TO { PUBLIC | GROUP group | username }
  • privilege − 値には、SELECT、INSERT、UPDATE、DELETE、RULE、ALL を指定できます。
  • object − アクセス権限を付与するオブジェクト名です。可能なオブジェクトには、table、view、sequence があります。
  • PUBLIC − すべてのユーザーを表します。
  • GROUP group − ユーザーグループに権限を付与します。
  • username − 権限を付与するユーザー名です。PUBLICはすべてのユーザーを表す短縮形です。

さらに、REVOKEコマンドを使用して権限を取り消すことができます。REVOKE構文:

REVOKE privilege [, ...]
ON object [, ...]
FROM { PUBLIC | GROUP groupname | username }

例

権限を理解するために、ユーザーを作成します:

サンプルdb=# CREATE USER サンプル WITH PASSWORD 'password';
CREATE ROLE

メッセージ CREATE ROLE は、ユーザー "サンプル" が作成されたことを示します。

例

COMPANY テーブルを作成します(COMPANY SQL ファイルをダウンロード)、データ内容は次のとおりです:

サンプルdb# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

次に、ユーザー "サンプル" に権限を割り当てます:

サンプルdb=# GRANT ALL ON COMPANY TO サンプル;
GRANT

メッセージ GRANT は、すべての権限が "サンプル" に割り当てられたことを示します。

次に、ユーザー "サンプル" の権限を取り消します:

サンプルdb=# REVOKE ALL ON COMPANY FROM サンプル;
REVOKE

メッセージ REVOKE は、ユーザーの権限が取り消されたことを示します。

ユーザーを削除することもできます:

サンプルdb=# DROP USER サンプル;
DROP ROLE

メッセージ DROP ROLE は、ユーザー "サンプル" がデータベースから削除されたことを示します。

その他の拡張