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→●[マニュアル]








以上 
inserted by FC2 system