PostgreSQLの初期設定(ユーザー作成と外部接続許可)【Ubuntu】

PostgreSQLの初期設定(ユーザー作成と外部接続許可) サーバー

デフォルトでは、PostgreSQLに外部から接続できません。
例えば、WindowsからLinux上のPostgreSQLに接続できないということです。

この記事では、外部接続が可能になるための設定を解説していきます。
そのことに絞って無駄な説明は、できる限りで省きます。

本記事の内容

  • PostgreSQLを外部接続可能にするには?
  • 接続用のユーザー作成
  • 接続許可の設定(設定ファイル変更)
  • ファイアウォールでポート開放
  • 外部接続の動作確認

それでは、上記に沿って解説していきます。

PostgreSQLを外部接続可能にするには?

もちろん、PostgreSQLのインストールは済ませておいてください。

外部接続を可能にするためにやることは、次の3つです。

  • 接続用のユーザー作成
  • 接続許可の設定(設定ファイル変更)
  • ファイアウォールの開放

管理者であるpostgresを利用するのは、リスクが高すぎます。
そのため、接続用のユーザーを新規に作成する必要があります。

次にやることは、PostgreSQL自体の設定を変更することです。
デフォルトでは、PostgreSQLは外部からの接続を許可していません。
そのため、PostgreSQLの設定を変更します。

最後の一つは、意外と盲点です。
ファイアウォールの開放になります。

対象となるポートを開放しておく必要があります。
デフォルトでは、5432がPostgreSQLの利用するポートになります。

以上、PostgreSQLを外部接続可能にするための設定を説明しました。
以下では、これらを説明していきます。

接続用のユーザー作成

まずは、postgresユーザーになります。

$ sudo -u postgres -i

そして、PostgreSQLに接続します。
ここでの接続は、ローカル接続です。

$ psql
psql (13.3 (Ubuntu 13.3-1.pgdg20.04+1))
"help"でヘルプを表示します。
postgres=#

接続できたら、次のコマンドでユーザーを作成します。

postgres=# CREATE USER testuser WITH PASSWORD 'testpass' CREATEDB;
CREATE ROLE

「CREATE USER ユーザー名 WITH PASSWORD ‘パスワード’ CREATEDB;」
クエリは、上記の形式となります。

では、ユーザー(ロール)を確認しましょう。

postgres=# \du
                                             ロール一覧
ロール名 |                                   属性                                   | 所属グループ
----------+--------------------------------------------------------------------------+--------------
postgres | スーパユーザ, ロール作成可, DB作成可, レプリケーション可, RLS のバイパス | {}
testuser | DB作成可                                                                 | {}

作成した「testuser」が、存在しています。
これでユーザー作成自体は、完了です。

しかし、このままではダメです。
作成したユーザーがアクセスできるデータベースを用意する必要があります。

データベースが関連付いていないと、ログインできない仕様になっています。
そこで、次のコマンドで「testuser」がアクセスできるデータベースを作成します。

postgres=# CREATE DATABASE testdb WITH OWNER testuser;
CREATE DATABASE

「testdb」が、作成するデータベース名です。

以上、接続用のユーザー作成に関しての説明でした。
次は、接続許可の設定(設定ファイル変更)を行いましょう。

接続許可の設定(設定ファイル変更)

対象となるファイルは、以下の2つ。

  • postgresql.conf
  • pg_hba.conf

それぞれを説明していきます。

postgresql.conf

aptコマンドでインストールした場合、次の場所に存在しています。

/etc/postgresql/13/main/postgresql.conf

バージョンにより、若干は異なるでしょう。
このファイルの「listen_addresses」部分を変更します。

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
listen_addresses = '*'

正確には、「listen_addresses = ‘*’」を追記します。 「」はすべてのIPを許可しています。

IPを指定すれば、指定したIPアドレスからのアクセスを許可します。
複数のIPを指定する場合は、「,」カンマ区切りとなります。

各自の状況に応じて、ここは設定しましょう。

pg_hba.conf

aptコマンドでインストールした場合、次の場所に存在しています。

/etc/postgresql/13/main/pg_hba.conf

このファイルの「IPv4 local connections」部分を設定します。

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0               md5

「host all all 0.0.0.0/0 md5」
この部分を追記しています。

上記の設定により、パスワード認証での外部接続を許可します。
「0.0.0.0/0」と指定していることにより、すべてのネットワークが対象となっています。

ここも各自の状況に応じて、設定してください。

まとめ

上記の設定ファイルを変更したら、反映させましょう。
下記コマンドにより、PostgreSQLを再起動しています。

$ sudo service postgresql restart

以上、接続許可の設定を説明しました。
次は、ファイアウォールを開放します。

ファイアウォールでポート開放

PostgreSQLの初期ポートを変更していないなら、次のコマンドで状況を確認可能です。

$ sudo ufw status | grep '5432'

何も表示されないなら、「5432」は未開放という状況になります。
なお、「ufw」コマンドが動かない場合は、次の記事をご覧ください。
「ファイアウォールの設定」の箇所に、「ufw」のインストールについて説明があります。

「ufw」コマンドが動くなら、次のコマンドを実行します。

sudo ufw allow 5432

では、確認です。

$ sudo ufw status | grep '5432'
5432                       ALLOW       Anywhere
5432 (v6)                  ALLOW       Anywhere (v6)

ポートが、開放されていますね。

以上、ファイアウォールの開放について説明しました。
最後に、外部接続の動作確認を行います。

外部接続の動作確認

別の環境にログインします。
別の環境とは、先ほどまでログインしていたのとは別のサーバーのことです。

psqlコマンドが使えることは、前提条件となります。
下記のコマンドを実行。

psql -h 192.168.33.30  -U testuser -d testdb

「psql -h 接続先サーバー -U ユーザー名 -d 接続先DB」

「192.168.33.30」は、先ほどまで作業していたPostgreSQLサーバーのIPアドレスです。
あとは、もう大丈夫ですね。

コマンドを入力すると、パスワードを聞かれます。
入力して、成功すると以下のように表示されます。

$ psql -h 192.168.33.30  -U testuser -d testdb
ユーザ testuser のパスワード:
psql (13.3 (Ubuntu 13.3-1.pgdg20.04+1))
SSL 接続 (プロトコル: TLSv1.3、暗号化方式: TLS_AES_256_GCM_SHA384、ビット長: 256、圧縮: オフ)
"help"でヘルプを表示します。

testdb=>

外部接続が成功しています。

以上、外部接続の動作確認に関しての説明でした。

タイトルとURLをコピーしました