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 は、ユーザー "サンプル" がデータベースから削除されたことを示します。
その他の拡張