web-dev-qa-db-ja.com

Postgres 10.ユーザー/ロールを他のユーザーから隠す

Postgresql 10がインストールされていて、ユーザー/ロールの名前を他のユーザーに対して非表示にしたい。私は他の投稿を検索し、誰かがこれを提案しました:

REVOKE SELECT ON pg_catalog.pg_authid FROM public;
REVOKE SELECT ON pg_catalog.pg_auth_members FROM public;

これらすべてを実行した後、user1はユーザーの情報を掘り下げることができません(Error retrieving roles from the database server. ERROR: permission denied for relation pg_auth_members)でも、次の画像でわかるように、すべてを一覧表示できます

postgres

もちろん、user1はスーパーユーザーではありません。

私はすでにこれを効果なしでテストしました:

REVOKE SELECT ON pg_catalog.pg_roles FROM user1;
REVOKE SELECT ON pg_catalog.pg_user FROM user1;

効果なしでこれもテストしました:

REVOKE SELECT ON pg_catalog.pg_authid FROM user1;
REVOKE SELECT ON pg_catalog.pg_auth_members FROM user1;

次のステートメントを起動すると、ユーザーはログインできなくなり、すべてが壊れます。

REVOKE SELECT ON pg_catalog.pg_roles FROM public;
REVOKE SELECT ON pg_catalog.pg_user FROM public;

これを達成する方法はありますか?他のユーザーにユーザーの名前を隠すことは私にとって非常に重要です。

背景:ハッキングCTF(フラグを取得)仮想マシンを作成しています。これは課題の1つです...ポイントは、ユーザーが「正しいデータベースユーザー名」を見て接続できないようにすることです。それは彼/彼女がヒントや他の暗号のようなものを見つけるデータベースの中で見つけなければならないものです。

編集:「悲しい」回避策は、実際のユーザーを「非表示にしよう」とするために何百ものダミーユーザーを作成することです...しかし、これはエレガントなソリューションでなければなりません。何か助けは?

4
OscarAkaElvis

pgAdminはpg_rolesを使用してその情報を表示しているため、実行するだけで十分です

REVOKE SELECT ON pg_catalog.pg_roles FROM public;

ただし、情報は他のビューでも利用できるため、それらを非表示にする必要があります。たとえば、pg_userおよびpg_shadowビュー。

これらのビューは認証中に使用されないため、ユーザーがログインしたり何かを壊したりすることを妨げるべきではないため、他の何も変更していないことを確認する必要があります。ログには、ログインできない理由が示される場合があります。

2
Jimmy Stenke