LoginSignup
4
0

More than 1 year has passed since last update.

PG16:make use of regular expressions for the username in pg_hba.conf

Last updated at Posted at 2022-12-01

はじめに

にゃーん。趣味でポスグレをやっている者だ。

この記事はPostgreSQL 16 全部ぬこ Advent Calendar 2022 2日目の記事です。
今回はPostgreSQL 16に追加された、pg_hba.confに記述するユーザ名のちょっとした改善内容を書いてみます。

概要

項目 内容
タイトル make use of regular expressions for the username in pg_hba.conf
Topic Miscellaneous
Last modified 2022-10-24
ステータス commited
概要 pg_hba.onfのユーザ名に正規表現の指定を可能にする。

変更内容

PostgreSQLへの接続を制御するpg_hba.confファイルのユーザ名(user_name)の記述に正規表現での記述を許容します。
正規表現で記述する場合には、先頭にスラッシュ(/)をつけます。

動作例

ユーザ名に正規表現を使った簡単な例を示します。

ユーザとデータベースの設定

デフォルトユーザ(postgres)以外に、nuko, nuko_mike, nuko_tamaという一般ユーザが作成されているとします。

$ psql -U postgres postgres -c "\du"
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 nuko      |                                                            | {}
 nuko_mike |                                                            | {}
 nuko_tama |                                                            | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

$

また、データベースnukoが作成されているとします。

$ psql -U postgres postgres -c "SELECT datname FROM pg_database"
  datname
-----------
 postgres
 nuko
 template1
 template0
(4 rows)

pg_hba.confの設定

pg_hba.confに接続設定を追加します。設定後、PostgreSQLサーバをリロードして、pg_hba_dile_rulesビューで内容を確認します。

$ psql postgres -c "SELECT type, database, user_name FROM pg_hba_file_rules"
 type  | database |  user_name
-------+----------+-------------
 local | {nuko}   | {/^nuko_.*}
 local | {all}    | {postgres}
(2 rows)

database=nukoのエントリのuser_nameの記述に注目。
ここに/^nuko_.*という正規表現によるユーザ名の指定を書きます。
最初のスラッシュ(/)は正規表現記述を示すもの(だと思います)。続いて書かれている文字列が正規表現文字列になります。
^nuko_.*は、「先頭からnuko_で始まり以降は任意の文字」を示します。
追加したユーザのうち、nuko_mikenuko_tamaはこの正規表現に合致するユーザ名となります。nukoはこの正規表現には合致しません。

接続検証

この設定で、ユーザnuko,nuko_mike,nuko_tamaがデータベースnukoに接続できるか確認します。

ユーザnukoの場合、^nuko_.*の正規表現には合致せず、他に合致するエントリがないので接続エラーとなります。

$ psql -U nuko nuko -c "SELECT 1"
2022-10-31 09:03:16.955 JST [354] FATAL:  no pg_hba.conf entry for host "[local]", user "nuko", database "nuko", no encryption
psql: error: connection to server on socket "/tmp/.s.PGSQL.16001" failed: FATAL:  no pg_hba.conf entry for host "[local]", user "nuko", database "nuko", no encryption

ユーザnuko_mike,nuko_tamaは接続に成功します。

$ psql -U nuko_mike nuko -c "SELECT 1"
 ?column?
----------
        1
(1 row)

$ psql -U nuko_tama nuko -c "SELECT 1"
 ?column?
----------
        1
(1 row)

おわりに

pg_hba.confのユーザ名に正規表現が使えるようになることで、例えば接頭辞が同じで後ろが異なるユーザを特定のデータベースに接続可能にする、といったケースの記述が楽になるかもしれませんね。

4
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0