2016-03-26 8 views
4

私はいくつかのストアドファンクションのみを実行する必要のある特定のユーザーに対して、別の役割 "newrole"と新しいスキーマ "newschema"を作成しました。私は現在のデータベースのスキーマ "public"へのアクセスを取り消すことができました。私はPostgresデータベースへのすべてのアクセスを無効にしたいロールのpostgresデータベースへのアクセスを取り消します

SELECT * FROM pg_user 

と動作しないことを、次の試してみました:

REVOKE ALL ON DATABASE postgres FROM newrole 
「newrole」私はまだこのようPostgresデータベースへのアクセス権を持っているとしてログイン

newroleとしてログインしても、私はまだpostgresデータベースを読むことができます。

私はどのようにしてpostgres管理データベースへのアクセスを取り消しますか?

私は長い時間を検索しましたが、postgres管理データベースへのアクセスに関して何も見つかりませんでした。

TIA、

+0

削除したいユーザーはありますか?すべてのユーザー? –

+0

"newrole"のみ。通常のユーザーはデータベースに直接アクセスせず、他の理由でpostgresデータベースにアクセスする必要があることがあります。 – sibert

+0

私は接続特権を指定する必要があります、REVOKE接続を試みる必要があると信じていますONデータベース[dbname]から公衆 – Lucas

答えて

2

は、あなたはこれを実行することができます:

select * FROM information_schema.table_privileges where grantee = 'newrole'; 

がnewroleのためにすべての権限を表示します。その情報を使用すると、 'newschema'へのアクセス以外のすべてを明示的に取り消すことができます。

+0

@ sibert私は私が何をしているのかわからないので私の答えを削除しました...申し訳ありませんあなたは私のコマンドを実行し、問題。あなたのプロジェクトで幸運 –

+0

何らかの理由で、table_privilegesに "newrole"に関する情報がありません。だから私はまだ探しています... – sibert

3

この問題はデータベースpostgresとは関係ありません。代わりに、カタログを現在のデータベースで操作したいとします。すべてのデータベースには、スキーマpg_catalogのすべてのオブジェクトに関する情報のカタログと、スキーマinformation_schemaの標準準拠のフォームが含まれているため、ロールはpublicロールのメンバーに限定する必要があります。役割は:

REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM newrole; 
REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM public; 
REVOKE ALL PRIVILEGES ON SCHEMA information_schema FROM newrole; 
REVOKE ALL PRIVILEGES ON SCHEMA information_schema FROM public; 

しかし、システムは常にこのaccross・ボードの制限を尊重しない、カタログが理由であると、データベース内の重要な機能を提供します。特に、関数がまだ実行されている可能性があります。

あなたが実際にあなたがやっていることを知っていない限り、一般的に、あなたはカタログを操作したくないです

+0

あなたの説明をありがとうございます。しかし、 "newrole"は引き続きpg_usersなどにアクセスできます。機密情報(私はマルチテナント環境)を隠す方法はありませんか? – sibert

関連する問題