| PostgreSQL | PostgreSQLの環境設定 | |
| 2022/10/02 |
| PostgreSQLの環境設定 |
●専用の管理者ユーザーを作ろう
えーと、開発環境や勉強目的でPC-UNIXを個人で使っている場合には、
普段自分が使っているユーザーアカウントでPostgreSQLデータベースの管理をしてもいいのですが、
ここでは、PostgreSQL専用の管理者ユーザーを作ることにします。
サーバ上で本格的に使う場合にはPostgreSQL専用のユーザーで管理すべきなのと、
インターネットで検索できる情報のほとんどがその環境を前提としているので、それに従ったまでです。
「どうせ個人使用だから別にええねん」という場合はここはスキップしても構いません。
PostgreSQL管理者の名前としては「postgres」が慣習的によく使われます。
LinuxやFreeBSDだとuseradd(またはadduser)、Solarisではadmintoolなどのコマンドで postgres というアカウントを作れます。
% su root # groupadd apps # useradd postgres
# mkdir /usr/local/pgsql/data # chgrp apps /usr/local/pgsql/data # chown postgres /usr/local/pgsql/data
●環境設定
以下の作業はpostgresで行います。
# Cシェル系のシェルの場合
setenv PGDATA /usr/local/pgsql/data
setenv PATH /usr/local/pgsql/bin:{環境により任意}
setenv LD_LIBRARY_PATH /usr/local/pgsql/lib:{環境により任意}
setenv MANPATH /usr/local/pgsql/man:{環境により任意}
# sh系のシェルの場合
export PGDATA=/usr/local/pgsql/data
export PATH=/usr/local/pgsql/bin:{環境により任意}
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:{環境により任意}
export MANPATH=/usr/local/pgsql/man:{環境により任意}
# Cシェル系のシェルの場合 source .cshrc # sh系のシェルの場合 . .bashrc
●初期化
次にpostgresユーザーでデータベースファイルを置くディレクトリ、$PGDATA を初期化します。
下記のinitdbを含む多くのPostgreSQLコマンドは、「-D /usr/local/pgsql/data」
のように-Dオプションでデータベースファイルを置く場所(データベースクラスタと言います)
を指定できますが、環境変数 PGDATA を定義してあれば省略できます。
以降の説明では全て-Dをつけない例でご紹介します。
% initdb
●サーバープロセスの起動とデータベースの作成
% pg_ctl -l /home/postgres/logs/pgsql.log start
% createdb mydb
% psql mydb mydb=>
●特権ユーザーの概念
ここで私のような初心者は疑問に思うわけです。
PostgresSQLが動いているサーバにログインできるOSユーザーはデータベースの作成も削除も
(dropdbというコマンドがあります)自由にできて、データベースにはパスワード不要で接続できて、
テーブルの作成も削除も自由にできるとしたら、危ないじゃないか!
はい、その通りだとめちゃめちゃ危ないです。
実際にはpostgresというOSユーザーだけが、それらの事を自由にできます。
その理由は、initdbを実行したOSユーザーだからになります。
「postgres」という名前だからとか、サーバープロセスを起動したユーザーだからというのは、
直接的な理由ではありません。
データベースを作成すると、そのデータベースが所属するデータベースクラスタ(つまり$PGDATA)
のinitdbを実行したOSユーザーと同名のDBユーザーが自動的に作られます。
ここではpostgresという名前です。
psqlなどの多くのコマンドでは、DBユーザーを-Uオプションで指定しますが、
省略するとログインしているOSユーザーと同名のDBユーザーとみなします。
つまりOSユーザーpostgresで単にpsqlとだけ打つと、DBユーザーpostgresでDB接続を試みていると解釈されます。
後述しますが $PGDATA/pg_hba.conf という設定ファイルで、
ローカル接続の認証方法が初期状態で trust となっています。
これは認証不要という意味で、そのためにpsqlにはパスワード認証なく入ることができるのです。
| もくじ | ||
| PostgreSQL | (C) 2002-2022 MISUMI URANO (2000/01/12 - 2022/10/02) |