自治体情報システム担当者のためのPostgreSQL導入実践:堅牢性とWindows連携を考慮した基本設定
はじめに
自治体情報システム部門において、コスト効率の向上やベンダーロックインの回避は重要な課題です。オープンソースソフトウェア(OSS)データベースであるPostgreSQLは、その堅牢性、高機能性、そして商用データベースに匹敵する信頼性から、多くの組織で採用が進んでいます。本記事では、自治体情報システム担当者の皆様がPostgreSQLを安全かつ効率的に導入し、既存のWindows環境との連携も考慮した基本設定について解説します。
PostgreSQL導入のメリットと自治体における適用
PostgreSQLは、その柔軟なライセンス体系により、ライセンス費用を抑えながら高度なデータベース機能を利用できる点が大きなメリットです。また、豊富な機能と高い標準準拠性により、既存の商用データベースからの移行先としても有力な選択肢となります。
自治体環境においては、以下のような点がPostgreSQL活用のポイントとなります。
- コスト削減: ライセンス費用の抑制により、システム構築・運用コストの最適化に貢献します。
- 長期運用への適応: 世界中の開発コミュニティによって活発に開発が続けられており、長期的なサポートと機能改善が期待できます。
- データ連携の柔軟性: SQL標準に準拠しているため、様々なアプリケーションや既存システムとのデータ連携が比較的容易です。
- セキュリティ: 強固な認証機能、SSL/TLSによる暗号化通信、細粒度なアクセス制御など、セキュリティ機能が充実しています。
導入準備:環境選定とシステム要件
PostgreSQLを導入するにあたり、まずは動作環境の選定が重要です。多くのOSSと同様にLinux環境での利用が一般的ですが、Windows Server上での動作も可能です。自治体システムにおいては、パフォーマンス、安定性、セキュリティの観点から、Linuxディストリビューション(例: Ubuntu Server、CentOS Streamなど)を選択することが推奨されます。
1. システム要件の確認
PostgreSQLの性能は、ハードウェアリソースに大きく依存します。導入を検討するシステムのデータ量、同時接続数、トランザクション量に応じて、CPU、メモリ、ディスクI/Oの要件を適切に見積もる必要があります。
- CPU: コア数が多いほど並列処理能力が向上します。
- メモリ:
shared_buffers
などで利用され、多くのメモリを割り当てることでディスクI/Oを削減し、パフォーマンスを向上させることができます。 - ディスクI/O: データベースの読み書き速度に直結するため、SSDの使用が強く推奨されます。特に、WAL (Write Ahead Log) の書き込み性能が重要です。
2. セキュリティ要件の確認
自治体システムでは、厳格なセキュリティ要件が求められます。以下の点を事前に確認してください。
- ファイアウォールによるアクセス制限
- データベースユーザーの権限分離
- 通信の暗号化(SSL/TLS)
- 監査ログの取得
PostgreSQLのインストール(Ubuntu Server 22.04 LTSを例に)
ここでは、Ubuntu Server 22.04 LTSにPostgreSQLをインストールする基本的な手順を説明します。
# パッケージリストを更新します
sudo apt update
# PostgreSQLとその追加モジュールをインストールします
sudo apt install postgresql postgresql-contrib
# PostgreSQLサービスのステータスを確認します
sudo systemctl status postgresql
# 以下のように表示されれば、サービスが起動しています
# ● postgresql.service - PostgreSQL relational database server
# Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
# Active: active (exited) since ...
インストールが完了すると、postgres
というスーパーユーザーアカウントが自動的に作成され、PostgreSQLサービスが起動します。
初期設定とセキュリティ強化
インストール直後のPostgreSQLは、デフォルト設定のままでは外部からの接続が制限されており、セキュリティ設定も最小限です。運用に耐えうる堅牢なデータベースとするため、以下の設定を行います。
1. postgres
ユーザーのパスワード設定
postgres
ユーザーはデータベースのスーパーユーザーであり、非常に高い権限を持ちます。このアカウントのパスワードを設定することは、セキュリティ上必須です。
# postgresユーザーでpsqlコマンドを実行します
sudo -u postgres psql
# postgresユーザーのパスワードを設定します
ALTER USER postgres WITH PASSWORD '任意の強力なパスワード';
# psqlを終了します
\q
パスワードは、辞書攻撃やブルートフォース攻撃に耐えうる、複雑で長いものを設定してください。
2. リモート接続の許可と接続認証設定
PostgreSQLはデフォルトでローカルホストからの接続のみを許可しています。他のサーバーやWindowsクライアントから接続するには、postgresql.conf
と pg_hba.conf
の設定を変更する必要があります。
-
postgresql.conf
の変更:listen_addresses
パラメータで、どのIPアドレスからの接続を許可するかを設定します。特定のIPアドレスからの接続のみを許可する場合や、すべてのインターフェースからの接続を許可する場合に設定します。```bash sudo vi /etc/postgresql/14/main/postgresql.conf
listen_addresses
の行を探し、以下のように変更します全てのインターフェースからの接続を許可する場合
listen_addresses = '*'
特定のIPアドレス(例: 192.168.1.10)からの接続のみを許可する場合
listen_addresses = 'localhost, 192.168.1.10'
```
-
pg_hba.conf
の変更:pg_hba.conf
ファイルは、接続元IPアドレス、データベース、ユーザー、認証方式などを指定し、接続を許可または拒否するルールを定義します。bash sudo vi /etc/postgresql/14/main/pg_hba.conf
ファイルの末尾に、Windowsクライアントからの接続を許可するルールを追加します。例として、192.168.1.0/24
のネットワークからの接続を許可し、scram-sha-256
認証を使用する場合の設定を示します。```
TYPE DATABASE USER ADDRESS METHOD
host all all 192.168.1.0/24 scram-sha-256
`` *
TYPE:
hostはTCP/IP接続を意味します。 *
DATABASE:
allは全てのデータベースへの接続を許可します。特定のデータベースを指定することも可能です。 *
USER:
allは全てのユーザーからの接続を許可します。特定のユーザーを指定することも可能です。 *
ADDRESS: 接続元のIPアドレスまたはネットワークアドレスを指定します。 *
METHOD:
scram-sha-256はパスワードベースの強力な認証方式です。他に
md5、
trust(非推奨)、
ident` などがあります。セキュリティ要件に応じて最適な認証方式を選択してください。変更後、PostgreSQLサービスを再起動して設定を適用します。
bash sudo systemctl restart postgresql
3. 新規データベースとユーザーの作成
postgres
スーパーユーザーを直接使用するのではなく、各アプリケーションやシステム連携ごとに専用のデータベースとユーザーを作成し、最小限の権限を付与することがセキュリティ上のベストプラクティスです。
# postgresユーザーでpsqlを実行します
sudo -u postgres psql
# 新しいデータベースを作成します
CREATE DATABASE my_city_app_db ENCODING 'UTF8' LC_COLLATE 'ja_JP.UTF-8' LC_CTYPE 'ja_JP.UTF-8' TEMPLATE template0;
# 新しいユーザーを作成し、パスワードを設定します
CREATE USER city_app_user WITH ENCRYPTED PASSWORD 'アプリ用の強力なパスワード';
# 作成したデータベースに対する権限を付与します
GRANT ALL PRIVILEGES ON DATABASE my_city_app_db TO city_app_user;
# 必要に応じて、特定のテーブルやスキーマに対する権限を付与します
-- GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO city_app_user;
# psqlを終了します
\q
Windows Serverからの接続と連携
自治体情報システムでは、既存のWindows ServerベースのアプリケーションやBIツールからPostgreSQLに接続する必要が生じることが多くあります。
1. ODBC/JDBCドライバーのインストール
WindowsアプリケーションからPostgreSQLに接続するには、ODBC (Open Database Connectivity) または JDBC (Java Database Connectivity) ドライバーが必要です。
- ODBCドライバー: Windows上のC/C++、.NETアプリケーション、ExcelやAccessからの接続に利用されます。「psqlODBC」として公開されており、PostgreSQLの公式サイトからダウンロードできます。
- JDBCドライバー: Javaアプリケーションからの接続に利用されます。PostgreSQLの公式サイトから「PostgreSQL JDBC Driver」をダウンロードして利用します。
ドライバーをインストール後、Windowsの「ODBC データソースアドミニストレーター」を使用して、PostgreSQLへのデータソース名 (DSN) を設定します。
2. GUIツールによる接続
Windows環境からPostgreSQLを管理するためのGUIツールとして、公式の「pgAdmin」が広く利用されています。pgAdminはPostgreSQLの管理、監視、データ操作などを直感的に行えるため、運用担当者にとって非常に有効です。
- pgAdminをWindowsにインストールします。
- インストール後、pgAdminを起動し、「サーバー」を右クリックして「新規」→「サーバー」を選択します。
- 「接続」タブで、PostgreSQLサーバーのIPアドレス、ポート番号(デフォルト: 5432)、データベース名、ユーザー名、パスワードを入力し、接続を確立します。
堅牢な運用に向けた考慮事項
PostgreSQLを導入した後も、安定したサービス提供のためには適切な運用管理が不可欠です。
1. バックアップ戦略の策定
データの消失は自治体業務に甚大な影響を与えるため、堅牢なバックアップ戦略は最も重要です。
- 論理バックアップ (
pg_dump
): データベースの内容をSQL形式でダンプします。小規模なデータベースや特定のデータベースのバックアップに適しています。bash # 特定のデータベースをバックアップ(例: my_city_app_db) pg_dump -U city_app_user -h 127.0.0.1 -Fc my_city_app_db > /path/to/backup/my_city_app_db_$(date +%Y%m%d).dump
- 物理バックアップ (PITR - Point-In-Time Recovery): データベースのファイルシステムレベルでのコピーとWAL (Write-Ahead Log) のアーカイブを組み合わせることで、任意の時点への復旧を可能にします。大規模なデータベースや高可用性が求められるシステムに適しています。
バックアップは定期的に実施し、取得したバックアップデータが実際にリストア可能であることを検証する作業も計画に含めてください。
2. ログ管理と監視
PostgreSQLのログファイルには、エラー情報、警告、SQL文の実行状況など、運用上の貴重な情報が含まれています。ログレベルを適切に設定し、定期的に内容を確認することで、問題の早期発見に繋がります。
また、Zabbixなどの既存の監視システムと連携し、CPU使用率、メモリ使用量、ディスクI/O、データベースの接続数、レプリケーションの状態などを継続的に監視することで、システムの異常を検知し、安定稼働を維持することができます。
3. パッチ適用とアップグレード
PostgreSQLはセキュリティ脆弱性の修正や機能改善のため、定期的にアップデートがリリースされます。安定版の最新パッチを適用することで、システムのセキュリティと安定性を維持することができます。メジャーバージョンアップグレードは、新機能の利用やパフォーマンス改善に繋がりますが、互換性の確認や十分なテストが不可欠です。
よくあるトラブルと対処法
- 接続拒否:
pg_hba.conf
の設定が正しいか確認してください。特にIPアドレス、認証方式、データベース、ユーザーの組み合わせが一致しているか。postgresql.conf
のlisten_addresses
が適切に設定され、PostgreSQLサービスが再起動されているか確認してください。- サーバーのファイアウォール(例:
ufw
)がPostgreSQLのポート(デフォルト: 5432)をブロックしていないか確認してください。bash # Ubuntuの場合、ファイアウォールの状態を確認 sudo ufw status # ポート5432を許可する sudo ufw allow 5432/tcp
- 認証失敗:
- ユーザー名とパスワードが正しいか確認してください。
pg_hba.conf
で指定されている認証方式がクライアントと一致しているか確認してください。例えば、scram-sha-256
ではなくmd5
が指定されている場合など。
まとめ
本記事では、自治体情報システム担当者の皆様がPostgreSQLを導入し、堅牢なデータベース環境を構築するための基本的な手順とWindows連携のポイントを解説しました。PostgreSQLの導入は、初期設定だけでなく、セキュリティ、バックアップ、監視、そして定期的なメンテナンスを含む長期的な運用計画が成功の鍵となります。
OSSデータベースの活用は、自治体における情報システム運用の選択肢を広げ、柔軟性とコスト効率を両立させる有力な手段です。本記事が、皆様のPostgreSQL導入と運用の一助となれば幸いです。