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