PostgreSQL   PostgreSQLのユーザーとネットワークアクセスの管理
  2022/10/02


スキーマの作成

Oracle Databaseにもスキーマとユーザーという概念はありますが、 Oracleの場合はスキーマとユーザーは完全に一体化しており、利用者が分離することはできません。 それに対してPostgreSQLでは、スキーマとユーザーは別々に存在でき、 それらは管理方針に合わせて自由に対応付けることが可能です。 しかし、ここでは個人学習が目的なので、あまり複雑な設定をしても意味が薄いため、 とりあえずpostgresユーザーやpublicスキーマとは別に業務アプリケーション専用のスキーマとユーザーを同じdev1という名前で作り、 dev1ユーザーはdev1スキーマの全ての操作権限を持つことにしたいと思います。
スキーマを作るにはpostgresユーザーでpsqlで接続して、CREATE SCHEMA文を発行します。

CREATE SCHEMA dev1;


ユーザーの作成

新しいユーザーを作るには、OSのcreateuserコマンドを使うか、 CREATE USER文を使います。ここでは後者の例で説明します。

CREATE USER dev1 WITH PASSWORD 'passpass';
また、後になってパスワードを変更するにはALTER USER文を使います。
ALTER USER dev1 WITH PASSWORD 'passpass';
なお、DBユーザーと同じ名前のOSユーザーは存在していなくても構いません。
ここの例では、必要ない限り、dev1というOSユーザーは作らなくてよいということです。
これでdev1ユーザーができましたが、これだけではdev1ユーザーはログインしても何もできません。 スキーマdev1にテーブルを作る権限をGRANT文で付与します。
GRANT ALL ON SCHEMA dev1 TO dev1;
スキーマに関する権限はALL以外にUSAGEとCREATEがあり、テーブル作成権限はCREATEです。 が、CREATE権限だけあってもテーブルは作れず、USAGEとCREATEを両方持っている必要があります。 ならばALLでいいねということで、ここではALLを付与しています。


ネットワークアクセスの管理

ネットワーク経由でリモートからデータベースに接続するには、 $PGDATA/postgresql.confと$PGDATA/pg_hba.conf というファイルを編集する必要があります。
このファイルの初期設定では、ローカルからは全く認証なしでアクセスできる反面、 リモートからは全く接続を受け付けない設定になっているので、 セキュリティに注意しながら最低限必要なリモートのIPアドレスと認証方法を記述します。

●postgresのパスワード設定
まず、postgresユーザーにパスワードを設定します。
postgresのOSユーザーのパスワードと、ここで設定するDBユーザーとしてのパスワードは一致させなくてOKです。

ALTER USER postgres WITH PASSWORD 'passpass';

●postgresql.conf の編集
冒頭部分でコメントになっている「listen_addresses」行を有効にし、"*"に変更します。

#listen_addresses = 'localhost'
listen_addresses = '*'

●pg_hba.conf の編集
アクセスを許可するクライアントマシンのIPアドレスやサブネットを、次の形式で指定します。

local   all             all                                     md5
host    all             all             127.0.0.1/32            md5
host    all             all             192.168.93.0/24         md5
「trust」は、全く認証行為をせずにアクセスを許可します。 「md5」や「password」は、ALTER USERコマンドで設定した、PostgreSQL独自のパスワードで認証を行います。 このほかにも何種類かの方法で認証を行うオプションもあるので、詳しくはマニュアルをご覧ください。 特に、ネットワーク経由だとパスワードの盗聴の危険があるので、本格的な運用に際しては暗号化などの対策が必要です。
基本的な設定としては、trustは危険なのでまず全ての認証方式をmd5に変更した後、 接続を許可するホストだけをhostの行で定義するのが良いと思います。
この設定を行ってサーバープロセスを再起動すると、以降postgresユーザーに対してもパスワード認証が必要になります。

  もくじ
PostgreSQL   (C) 2002-2023 MISUMI URANO (2002/09/06 - 2022/10/02)