7

PostgreSQL バージョン 9.1、

デフォルトのユーザー「postgres」でデータベースにログインしており、データベースにはデフォルトのロール「public」が含まれています

私が持っているデータベースのリスト、

1.データベース1

2.データベース2

3.データベース3

ここで、「database2」への権限のみを持つユーザー「newuser」を作成する必要があります。他のデータベースにはログインしないでください。

私はこの構文を使ってみました

create role newuser with login nosuperuser nocreatedb nocreaterole noinherit password 'newpassword';
revoke all privileges on database database1, database3 from newuser;

ただし、「newuser」は他のデータベース(database1/database3)にログインでき、他のスキーマからテーブルを選択できます。(公開スキーマのテーブルは表示されません)

ユーザーを作成して権限を付与する正しい手順を誰か教えてください。

特定のデータベースに対してのみすべての権限を持つことができるユーザーが必要です。他のデータベースにはログインしないでください:)

4

4 に答える 4

6

データベースに接続する権限を取り消そうとしましたか? これにより、データベースでの以降の操作も禁止されます。

REVOKE CONNECT ON DATABASE your_db FROM user;

少し掘り下げた後、上記が機能しなかった理由が明らかになりました。たぶん、Tom Laneの回答がより良い解決策を提供してくれるでしょう。

于 2012-06-13T10:34:51.557 に答える
0

私がいつもこれを行う方法は、 を介したpg_hba.confものですが、あなたが試みている方法でも可能であると思います。

リストされたエンティティで何かを拒否するには、すべての特権を取り消すことが期待されます。したがって、実際に選択するどころか、接続もありません。ここで私たちが忘れている明らかな何かがあるかもしれません。

とにかく、これは構成ファイルを使用して簡単に解決できるはずです。を追加し、newuserそこに許可するデータベースのみをリストします。そのユーザーから他のデータベースへの接続を効果的に拒否します。明らかに、すでに持っている特権設定に加えてこれを使用してください。

于 2012-06-13T10:06:27.030 に答える