pg_catalog

pg_namespace スキーマへのアクセス権限確認

スキーマへのアクセス権限を調べる

スキーマにもアクセス権限が必要です。スキーマのオーナ以外がそのスキーマへアクセスするには権限付与が必要になります。これは各テーブルやビューにアクセス権限を付与する事に加えて必要です。

select n.nspname as "schema",pg_catalog.pg_get_userbyid(n.nspowner) as "owner"
,n.nspacl
from pg_catalog.pg_namespace n
where n.nspname !~ '^pg_' and n.nspname <> 'information_schema'
order by 1;
myposdb=> select n.nspname as "schema",pg_catalog.pg_get_userbyid(n.nspowner) as "owner"
myposdb-> ,n.nspacl
myposdb-> from pg_catalog.pg_namespace n
myposdb-> where n.nspname !~ '^pg_' and n.nspname <> 'information_schema'
myposdb-> order by 1;
  schema   |  owner   |                  nspacl
-----------+----------+------------------------------------------
 prjschema | prjadmin | {prjadmin=UC/prjadmin,sooni=UC/prjadmin}
 public    | postgres | {postgres=UC/postgres,=UC/postgres}
 sooni     | sooni    | {sooni=UC/sooni,udonman=U/sooni}
 udonman   | sooni    |
(4 行)


myposdb=>
スキーマへのアクセス権限付与SQL

スキーマへ付与できる権限はUSAGE、CREATEの2つです。以下の例ではonline_userがsooniスキーマのオブジェクトを参照できるようにUSAGE権限を付与しています。実際にsooniスキーマのオブジェクト(例えばテーブル)をselectしたい場合は、さらにテーブルへのselect権限も付与する必要があります。

grant usage on schema sooni to online_user
;
myposdb=# grant usage on schema sooni to online_user;
GRANT
myposdb=# select n.nspname as "schema",pg_catalog.pg_get_userbyid(n.nspowner) as "owner"
myposdb-# ,n.nspacl
myposdb-# from pg_catalog.pg_namespace n
myposdb-# where n.nspname !~ '^pg_' and n.nspname <> 'information_schema'
myposdb-# order by 1;
  schema   |  owner   |                        nspacl
-----------+----------+------------------------------------------------------
 prjschema | prjadmin | {prjadmin=UC/prjadmin,sooni=UC/prjadmin}
 public    | postgres | {postgres=UC/postgres,=UC/postgres}
 sooni     | sooni    | {sooni=UC/sooni,udonman=U/sooni,online_user=U/sooni}
 udonman   | sooni    |
(4 行)


myposdb=#

以下はCREATE権限を付与しています。これによってonline_userはsooniスキーマに対しオブジェクトをcreateできるようになります。online_userがcreateしたテーブルであっても上記USAGE権限がないとselectできません。つまりCREATE権限だけ付与するようなシーンというのはあまりないと思われます。

grant create on schema sooni to online_user
;
myposdb=# grant usage on schema sooni to online_user;
GRANT
myposdb=# select n.nspname as "schema",pg_catalog.pg_get_userbyid(n.nspowner) as "owner"
myposdb-# ,n.nspacl
myposdb-# from pg_catalog.pg_namespace n
myposdb-# where n.nspname !~ '^pg_' and n.nspname <> 'information_schema'
myposdb-# order by 1;
  schema   |  owner   |                        nspacl
-----------+----------+------------------------------------------------------
 prjschema | prjadmin | {prjadmin=UC/prjadmin,sooni=UC/prjadmin}
 public    | postgres | {postgres=UC/postgres,=UC/postgres}
 sooni     | sooni    | {sooni=UC/sooni,udonman=U/sooni,online_user=UC/sooni}
 udonman   | sooni    |
(4 行)


myposdb=#
スキーマへのアクセス権限取り消しSQL
revoke usage on schema sooni from online_user
;

USAGE権限付与がされていないと、、

スポンサーリンク
タイトルとURLをコピーしました