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