すべてのユーザーは、pg_hba.confのpostgresデータベースにアクセスする必要がありますか?
-
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を「開いている」ままにすることができます。