- - PR -
Postgres8 他スキーマの存在を伏せる方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2009-03-12 11:48
PostgreSQL 8.2.9にて複数のログインロールと関連するスキーマを作成し、
それぞれ接続ユーザーを分けて使用しています。 AとBのスキーマがあるとしたときに、 AにログインしたユーザーはBのテーブルのデータ取得はできないようになっていますが、たとえば下記SQLでテーブルの存在を確認することができています。 select * from pg_tables AがログインしたときにはAスキーマ以外の存在もわからないようにすることは可能でしょうか。 |
|
投稿日時: 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 のテーブル一覧を参照できないはずです。 |
|
投稿日時: 2009-03-26 15:48
あんとれさん、ご回答ありがとうございます。
>ただ、A がデータベースA を所有かつ使用し、ユーザB がデータベースB を所有かつ使用する。 1つのデータベース内のスキーマで分けているので、残念ながらできません。 ありがとうございました。 |
1