PostgreSQLへセキュアに接続する方法
MySQLが信用に関する情報をすべてSQLデータベースそのものに格納するのに対し、PostgreSQLは2つのアプローチを用いる。テーブルへのアクセスとパスワードの情報に関してはPostgreSQL自身で定義する一方で、実際の接続に関する情報は外部のファイルに格納されるのである。この設定ファイルは一般的には/var/lib/pgsql/data/pg_hba.confという名前で存在しており、誰がどのような方法でデータベースにアクセスできるのかを定めている。
PostgreSQLでは、ローカル接続と(TCP/IPを用いた)リモート接続の2種類の接続方法をサポートしている。そのため、設定ファイルはどちらの接続タイプを定義しているかによって少々異なって見える。以下の例を見て欲しい。
local all postgres trust host all postgres 127.0.0.1/32 trust
上記の例では、postgresユーザのデータベースへの接続を設定している。localと書かれている最初の行は、UNIXのドメインソケット接続もしくはローカル接続を示している。一方、hostと書かれている2行目はTCP/IP接続を示している。この設定はさらに細かく指定することが可能だ。たとえばhostsslを指定すると、TCP/IP通信をSSLで行うことを要求できる。一方、単にhostを指定した場合は、暗号化の有無に関係なくすべての接続が対象となる。
このファイルの構文は以下のようになる。
- local [database] [user] [method] [option]
- host [database] [user] [cidr-address] [method] [option]
お分かりのように、2つの接続タイプでもっとも異なるのは、hostタイプ(またはhostssl、hostnossl)ではCIDRアドレスを指定する必要があるということだ。CIDRアドレスはIPアドレスとCIDRネットマスクで構成される。上記の例では、127.0.0.1/32という値が使用されている。ちなみに、この項目では「192.168.0.0/24」といった表記方法のほかに「192.168.0.0 255.255.255.0」という表記も使用できる。
databaseフィールドでは、どのデータベース接続の定義を行うかを指定する。「all」というキーワードを指定した場合は、すべてのデータベースへの接続を定義することになる。また、userフィールドでは指定されたデータベースに接続可能なユーザを設定する。そして、最後のmethodフィールドでは、利用する認証方法を指定する。
認証方法としてはtrust(認証を行わない)、reject(接続を拒否する)、password(プレーンテキストのパスワードを用いる)、cryptまたはmd5(cryptまたはmd5を用いて暗号化されたパスワードを用いる)、ident(identプロトコルを用いる)、krb5(Kerberos認証を用いる)、pam(PAMを用いる)、ldap(LDAPデータベースから信用情報を取得する)のいずれかを利用することができる。ただし、このように認証方法には非常に多くの選択肢が存在するものの、一般的にはパスワードを暗号化して送信するmd5がよく使われるだろう。
- 新着記事
- 特集
- ブログ
- 企画特集
-
明日からではもう遅い?!
-
特集:IT最適化への道
-
IDaaSって何?
-
企業のリスクマネージメント対策に
-
次の一手はこれだ!
-
第4回CNBFミートアップレポート
-
データの散在と非常率運用がネック
-
デジタルを当たり前と言えるか?
-
コスト・運用の壁を崩す!
-
いまさら聞けない「PPAP」
-
クラウド活用 虎の巻
-
性能の大幅向上を実現!
-
未来のセキュリティイノベーターへ
-
連載!プロが語るストレージ戦略
-
クラウド時代に理想のセキュリティ
-
その先へ
-
連載!プロが語るストレージ戦略
-
いまあるデータで身近な業務をDX
-
連載!プロが語るストレージ戦略
-
SECCON2020レポート第二弾!
-
エンジニアのためのREHL8まとめ
-
ハイブリッドクラウドとAI
-
ビッグデータ最前線!
-
SoRとSoEをつなぐDX推進の要
-
DX時代のアプリケーションセキュリティ
-
厳しい目が向けられる内部不正
-
漫画で解説:IoTはじめの一歩
-
リモート、オフィス、オンサイト
-
セキュリティの今を知る
-
M365 活用のセキュリティ対策
-
次期自治体ネットワーク強靭化へ
-
ゼロトラストに向けた道のりを支援
-
部分最適だけではダメ
-
ネットワークもサービスとして使う