すべてのユーザーは、pg_hba.confのpostgresデータベースにアクセスする必要がありますか?

dba.stackexchange https://dba.stackexchange.com/questions/19088

  •  22-10-2019
  •  | 
  •  

質問

Pgadminでユーザー作成プロセスをテストしていました。データベースがあります db1 ユーザーを作成して、接続できるようにしたいと考えています。これをユーザーが接続できる唯一のデータベースにしたいのです。

ユーザーを作成した後、私は私を開きました pg_hba.conf ファイルして、いくつかの行を追加しました:

host    db1 dbuser  127.0.0.1/32    md5
host    db1 dbuser  ::1/128         md5

Postgresユーザーは、すべてのデータベースにアクセスできます。

host    all postgres    127.0.0.1/32    md5
host    all postgres    ::1/128         md5

pgadminを介してサーバーに接続すると、それを示すエラーが発生します dbuser にアクセスできません postgres データベース。

これは正常ですか? dbuserは、私が彼にアクセスするだけで、Postgresデータベースへのアクセスを必要とする必要があります db1?データベースのリストにpostgresを追加するとすぐに dbuser, 、つながることができます。

役に立ちましたか?

解決

あなたが見るのは pgadmin 構成されたものに接続します メンテナンスDB - それは postgres デフォルトで。オブジェクトブラウザペイン内のサーバーを選択し、コンテキストメニュー(右クリック)から[プロパティ]を選択します。ドロップダウンメニューは典型的な選択のみを提供しますが、 データベース名を入力するだけです.

ユーザーのアクセスが制限されている場合 1 データベース pg_hba.conf (どれの それを行うための最も効率的な場所)、あなたはそれをPGADMINで構成することで動作させることができます これです メンテナンスDBとしてのデータベース。悪いことは何もありません。

もう1つのオプションは、メンテナンスDBへのアクセスを付与することです(postgres または何でも) pg_hba.conf さらに。

すべてのゲートを開くこともできます pg_hba.conf @a_horseが回答で説明したように、データベース許可を使用してアクセスを規制します。これは管理が簡単ですが、アクセスを制限する pg_hba.conf より安全で速い - DOS攻撃や重い負荷に対してより堅牢です。ただし、ほとんどの場合、大きな違いはありません。

引用 PGADMIN 1.22のドキュメント (PGADMIN IIIの最終リリース):

メンテナンスDBフィールドは、PGADMINが接続する初期データベースを指定するために使用されます。 pgagentスキーマと adminpack インストールされているオブジェクト(両方ともオプション)。 PostgreSQL 8.1以降では、メンテナンスDBは通常「Postgres」と呼ばれ、以前のバージョンでは「Template1」がよく使用されますが、テンプレートデータベースを乱雑にしないようにこの目的のために「Postgres」データベースを作成することが望ましいです。

他のヒント

PG_HBA.CONFを使用してこれを行う必要はありません。

そのユーザーからデータベースの接続特権を取り消すだけです。

ただし、デフォルトでは、PublicにはConnect Privilegeが付与されます。だからあなたは最初にそれを取り消す必要があります:

revoke connect on db1 from public;
grant connect on db1 to dbuser;

実行する必要があります revoke ... from public 特定のユーザーのみが接続できることを確認するためのすべてのデータベースのステートメント。

それを完了したら、すべてのユーザーとすべてのデータベースに対してpg_hba.confを「開いている」ままにすることができます。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top