- PR -

Postgres8 他スキーマの存在を伏せる方法

1
投稿者投稿内容
未記入
会議室デビュー日: 2006/03/01
投稿数: 18
投稿日時: 2009-03-12 11:48
PostgreSQL 8.2.9にて複数のログインロールと関連するスキーマを作成し、
それぞれ接続ユーザーを分けて使用しています。

AとBのスキーマがあるとしたときに、
AにログインしたユーザーはBのテーブルのデータ取得はできないようになっていますが、たとえば下記SQLでテーブルの存在を確認することができています。
select * from pg_tables

AがログインしたときにはAスキーマ以外の存在もわからないようにすることは可能でしょうか。
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2009-03-14 13:45
それは、pg_tables ビューの元になっている pg_class カタログに対して
行レベルのアクセス制御ができるかという質問に帰するでしょう。

SE-PostgreSQL なんていうものも開発されているようですが、
そういった物でも用いないのであれば不可能だと思います。

ただ、A がデータベースA を所有かつ使用し、ユーザB がデータベースB を所有かつ使用する。
このときにA がデータベースB にアクセスしたり、その逆がないのであれば、
データベースに対して public に付与さている権限を REVOKE することで、
ユーザA がデータベースB にアクセスしたり、その逆ができなくなります。

REVOKE ALL ON DATABASE A FROM PUBLIC;

つまるところ、ユーザA はユーザB のテーブル一覧を参照できないはずです。
未記入
会議室デビュー日: 2006/03/01
投稿数: 18
投稿日時: 2009-03-26 15:48
あんとれさん、ご回答ありがとうございます。

>ただ、A がデータベースA を所有かつ使用し、ユーザB がデータベースB を所有かつ使用する。

1つのデータベース内のスキーマで分けているので、残念ながらできません。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)