[pgsql-jp: 37362] Re: システムテーブルの権限設定

Takaaki Goto takaaki.goto @ futurism.ws
2006年 7月 27日 (木) 16:26:22 JST


後藤です。
ご返信ありがとうございます。

> 「システムカタログへのアクセス権を削除して大丈夫なのか?」という不安がよぎりますが、

確かに不安がよぎります。
この考えに至った経緯を申しますと、
システムテーブルにはデータベースやユーザ情報が格納されており、
読取専用ではありますが自分以外にどのようなユーザが在るかを確認できます。
よって、ユーザ自身以外の情報が読み取れる必要があるのか?
ユーザ自身以外の情報は見えない方が良いではないだろうか?
と考えに至ったものです。

> 手段としてはREVOKEコマンドについて、7.4.6のマニュアルで
> 
>  個々のユーザはすべて、ユーザに直接許可された権限、ユーザが現在属しているグループに
>  許可された権限、そして、PUBLIC に許可された権限を合わせた権限を持っていることに
>  注意して下さい。従って、例えば、PUBLIC から SELECT 権限を取り上げることは、必ずしも
>  そのオブジェクトに対する SELECT 権限をすべてのユーザが失うことを意味しません。直接、
>  あるいは、グループ経由で許可されたユーザは、その権限を持ち続けます。 
> 
> と書いてあります。
> ですのでご所望の事を実現するには特定のユーザ名だけでなく、そのユーザが属するグループ、
> PUBLICすべてを対象にしてSELECT権限削除をしなければならないのではないでしょうか。

引用くださいましてありがとうございます。
ユーザ名、グループ、そしてPUBLIC全てに対して権限設定を行う必要があるとい
うことですね。

早速、試してみました。

REVOKE SELECT ON pg_XXXXX FROM GROUP グループ名 CASCADE
REVOKE SELECT ON pg_XXXXX FROM ユーザ名 CASCADE
REVOKE SELECT ON pg_XXXXX FROM PUBLIC CASCADE

REVOKEと応答され、エラーも無く、コマンドは成功したようです。
しかし、結果は同じでした。テーブルにアクセスできてしまいます。
SELECTだけでなく、ALL PRIVILEGESも試してみましたが同様でした。

システムカタログの権限は設定出来ないものなのか、
指定の仕方が間違っているのか、判りませんが
もっと他に原因があるのかもしれません。




pgsql-jp メーリングリストの案内