UbuntuにおけるPostgreSQL 16のセットアップとセキュリティ設定

PostgreSQL 16のインストール手順(Ubuntu環境)

Ubuntuに最新版のPostgreSQL 16を導入し、基本的な認証構成とネットワークアクセスを設定する方法について説明します。必要に応じて公式リポジトリを利用することで、標準パッケージよりも新しいバージョンを取得できます。

公式リポジトリの追加(任意)

最新の安定版を使用する場合、PostgreSQL Global Development Groupの公式APTソースを登録します。

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

GPG鍵の登録

パッケージの信頼性を保証するために署名鍵をインポートします。

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

データベースサーバーのインストール

依存関係を含めて一括でインストールします。

sudo apt update && sudo apt install -y postgresql-16 postgresql-contrib-16 postgresql-client-16
  • postgresql-16: メインのデータベースエンジン
  • postgresql-contrib-16: 追加機能(uuid-generation, full-text searchなど)
  • postgresql-client-16: 外部接続用クライアントツール

サービスの状態確認と制御

インストール後、自動的に起動されますが、明示的にステータスを確認できます。

sudo systemctl status postgresql@16-main

停止または再開には以下のコマンドを使用します。

sudo systemctl start postgresql@16-main

カスタムデータディレクトリの設定

既定の場所ではなく、別のストレージにデータを配置する場合は次の手順で初期化します。

sudo systemctl stop postgresql@16-main
sudo mkdir -p /data/postgres
sudo chown -R postgres:postgres /data/postgres
sudo chmod 700 /data/postgres
sudo -u postgres /usr/lib/postgresql/16/bin/initdb -D /data/postgres

その後、postgresql.conf内のdata_directoryを更新してからサービスを再起動します。

管理者アカウントへのアクセス

初期状態ではOSユーザーpostgresがデータベースのスーパーユーザーとして利用可能です。特権セッションを開始します。

sudo -u postgres psql

プロンプトがpostgres=#に変われば接続成功です。

パスワードの強化

デフォルトではパスワードなしでローカル接続できるため、即座に安全なパスワードを設定すべきです。

ALTER USER postgres PASSWORD 'your_secure_password_here';

変更を反映したか確認するには以下を実行。

\du

特定ユーザーの暗号化方式を確認したい場合:

SELECT usename, substr(passwd, 1, 10) AS enc_method FROM pg_shadow WHERE usename = 'postgres';

外部からの接続を許可する設定

リモートホストやアプリケーションサーバーから接続可能なように構成を変更します。

pg_hba.conf の編集

ホストベースの認証ルールを調整します。ファイルのパスはバージョンにより異なります。

sudo nano /etc/postgresql/16/main/pg_hba.conf

IPv4全範囲に対してSCRAM-SHA-256によるパスワード認証を有効化。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             0.0.0.0/0               scram-sha-256

postgresql.conf の修正

ネットワークリスニングを有効にするためにリスンアドレスを変更。

listen_addresses = '*, ::'

複数NICがある環境では特定のIPを指定することも可能です。

設定の適用

変更を反映させるためにサービスを再起動。

sudo systemctl restart postgresql@16-main

ファイアウォールの調整

UFWを使用している場合、5432番ポートを開きます。

sudo ufw allow from any to any port 5432 proto tcp

新規ユーザーとデータベースの作成

運用用アカウントとして分離されたユーザーを作成することが推奨されます。

CREATE USER app_user WITH PASSWORD 'complex_password_2025';
CREATE DATABASE app_db OWNER app_user;
GRANT CONNECT ON DATABASE app_db TO app_user;

拡張機能の有効化

AIワークロード向けのベクトル類似度検索をサポートするpgvectorを有効にします。

CREATE EXTENSION IF NOT EXISTS vector SCHEMA public;

インストール済み拡張の一覧表示:

SELECT extname, extversion, extowner::regrole FROM pg_extension ORDER BY extname;

トラブルシューティングガイド

  • 接続拒否される: pg_hba.confのMETHODがtrustになっていないか確認。意図しないlocalルールが優先されている可能性があります。
  • リモート接続できない: セキュリティグループやクラウドプロバイダーのファイアウォール設定も併せて確認してください。
  • 認証エラー: scram-sha-256に対応していない古いクライアントでは接続できません。必要に応じてmd5に一時的に変更可能ですが非推奨です。

パスワードを失念した場合は再度sudo -u postgres psqlで接続し、ALTER USER文で再設定できます。

タグ: PostgreSQL Ubuntu database SCRAM-SHA-256 pgvector

7月5日 19:38 投稿