PostgreSQLスキルアップノート(自己啓発のための個人サイト)
権限
【一覧に戻る】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■■■ PostgreSQL スキルアップノート
■■■■
■◆■■ 権限
■■■■
■■■■
■■■■ 2013/01/27
■■■■ 使用環境:PostgreSQL9.1.7 (CentOS6.2)
(C) 2013 ohdb
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
★自己都合により実機確認は9.1、マニュアルへのリンクは9.2としています。ご了承下さい。
【マニュアル】
権限→●[マニュアル]
GRANT→●[マニュアル]
REVOKE→●[マニュアル]
【マニュアル参考】
第 20章データベースロール→●[マニュアル]
CREATE ROLE→●[マニュアル]
ALTER DEFAULT PRIVILEGES→●[マニュアル]
【記事】
−
■1■ 概要
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
作成したオブジェクトへアクセスできるのは、その所有者(CREATE実行)とスーパーユーザのみ。
他のユーザにアクセスさせるためにはGRANTにより権限を与える必要がある。
代表例
-----------------------------------------------------------------------
テーブル SELECT INSERT UPDATE DELETE TRUNCATE REFERENCES TRIGGER
ファンクション EXECUTE
データベース CREATE,CONNECT,TEMPORARY,TEMP
スキーマ CREATE,USAGE
テーブル空間 CREATE
権限の付与(GRANT)は大別して以下の2種類
データベースオブジェクトに対するGRANT
ロールに対するGRANT
権限の剥奪はREVOKE
詳細はマニュアル参照
REVOKE→●[マニュアル]
■2■ 権限の付与方法(GRANT)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【注意・この章の内容について】
マニュアルの内容から自分用に実務で必要となりそうな構文だけに絞り簡素化しています。
したがって、以下は正確な構文ではありません。(コマンドリファレンスではありません)
詳細はマニュアルを参照して下さい。
各項共通
・基本的なもの以外は記載省略した部分があります。
・省略できるキーワード等は省略しています。
・すべてに[ WITH GRANT OPTION ]※が可能ですが、簡略化のため省略しています。
※ 権限受領者が、他へその権限を与えられる権限
・構文中の「権限受領者」は ロール名のリスト(複数カンマ区切り)
またはPUBLIC。
1.テーブル
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
個別指定、スキーマ指定が可能
GRANT 権限 ON テーブル名のリスト TO 権限受領者
GRANT 権限 ON ALL TABLES IN SCHEMA スキーマ名リスト TO 権限受領者
・権限: SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER のリスト またはALL
・ALL TABLESには ビューおよび外部テーブルが含まれるため注意
★上記以外、カラム単位の付与も可能。
セキュリティ面で重要なカラムのアクセス管理には有用
(詳細マニュアル参照)
2.シーケンス
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
詳細要確認
個別指定、スキーマ指定が可能
GRANT 権限 ON SEQUENCE シーケンス名のリスト TO 権限受領者
GRANT 権限 ON ALL SEQUENCES IN SCHEMA schema名リスト TO 権限受領者
権限:USAGE,SELECT,UPDATEのリストまたはALL
USAGE currvalおよびnextval
SELECT currval
UPDATE nextvalおよびsetval
3.ファンクション
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
個別指定、スキーマ指定が可能
GRANT 権限 ON FUNCTION function_name ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) [, ...] TO 権限受領者
GRANT 権限 ON ALL FUNCTIONS IN SCHEMA スキーマ名リスト TO 権限受領者
権限:EXECUTEまたは ALL 実質はどちらも同じのはず
だたしEXECUTEはPUBLICにデフォルト付与されている。
4.手続き言語
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GRANT 権限 ON LANGUAGE lang_nameのリスト TO 権限受領者
権限:USAGEまたはALL 実質はどちらも同じのはず
USAGE
その手続き言語による関数作成を許可する。
だたしUSAGEはPUBLICにデフォルト付与されている。
5.データベース
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GRANT 権限 ON DATABASE DB名のリスト TO 権限受領者
権限:CREATE,CONNECT,TEMPORARY,TEMP のリストまたはALL
CREATE
そのデータベース内で新規スキーマを作成できる権限
DB作成ではなくその中にスキーマを作成できる権限
CONNECT
指定したDBへの接続。
だたしPUBLICにデフォルト付与されている。
TEMPORARY/TEMP
一時テーブルの作成
だたしPUBLICにデフォルト付与されている。
6.スキーマ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
スキーマには新規オブジェクトを作成できるCREATE権限と
新規作成はできないが、アクセスができるUSAGE権限がある。
GRANT 権限 ON SCHEMA スキーマ名のリスト TO 権限受領者
権限:CREATE,USAGEのリストまたは ALL
CREATE
そのスキーマ内での新規オブジェクトの作成権限。
USAGE
指定したスキーマに含まれるオブジェクトへのアクセスを許可
(オブジェクト自体の権限要件が満たされている場合)。
【参考】USAGE関連
スキーマ→●[マニュアル]
----------------------------------------------------------------------
ユーザは、デフォルトでは所有していないスキーマのオブジェクトをアクセスすることはできません。
アクセスするためには、そのスキーマの所有者からスキーマのUSAGE権限を付与してもらわなければなりません。
そのスキーマ内のオブジェクトに対して操作を行うには、そのオブジェクトに応じて、さらに追加の権限が必要となる場合があります。
----------------------------------------------------------------------
【注意】デフォルトでは誰でもpublicスキーマにオブジェクト作成できてしまう
publicスキーマには全てのユーザがCREATEとUSAGE権限を持っているので
publicスキーマにオブジェクトを作成できてしまう。
以下によりPUBLICからpublicスキーマへのCREATE権限を剥奪した方がよい。
・REVOKE CREATE ON SCHEMA public FROM PUBLIC;
詳細は以下を参照。
スキーマ→●[マニュアル]
6.テーブルスペース(テーブル空間)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GRANT 権限 ON TABLESPACE テーブル空間のリスト TO 権限受領者
権限:CREATEまたはALL
CREATE
そのテーブル空間の中へテーブル、インデックス、一時ファイルの作成ができる権限
以上、ここまでがすべて「データベースオブジェクトに対するGRANT」である。
もうひとつのGRANTである「ロールに対するGRANT」は次項。
7.ロールに対するGRANT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GRANT ロール名のリスト TO ロール名のリスト;
■4■ その他・ デフォルトでPUBLICに与えられている権限
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
以下の権限は最初からPUBLICに与えられている。
デフォルトのままなら特に改めて個々に権限を与えなくてもよいが、
セキュリティ上、PUBLICへの権限を絞っておく必要があると思われる。
PUBLICへ与えられている権限
---------------------------------------------
データベース CONNECT
CREATE TEMP TABLE
関数 EXECUTE
言語 USAGE
なお、ALTER DEFAULT PRIVILEGESにてカスタマイズが可能。(詳細省略)
ALTER DEFAULT PRIVILEGES→●[マニュアル]
以上