第7回:外からつなげてみる


まえ準備

データベースを作ったら検索をさせてお仕事の役に立たせたい。 インターネットから何時でもどこでも検索させたいやん。だってポスグレはサーバやもん。
といふ訳で別のマシンからネットを通じてポスグレにつなげてみる。
192.168.0.1:ポスグレが動いてるサーバのアドレス(Linuxポスグレ・稼動中)

192.168.0.2:よそのマシンのアドレス(Linuxポスグレ・インストールしただけ)
便宜上こんな構成で、
アドレス:192.168.0.2
ユーザ:watashi
パスワード:******
こんなユーザが psql を使ってポスグレに接続するやり方で動かしてみるけん。

サーバの設定

ポスグレをネットから接続させるには、接続を許可させるマシンのアドレスを設定ファイル(pg_hba.conf)に書くべし。 詳細はこちらを読むと吉。
pg_hba.conf(/usr/local/pgsql/dataにある)をいじれば色々な認証のタイプを設定できる。記述は、
[ホスト・タイプ] [データベース名] [IPアドレス] [サブネットマスク] [認証の種類]
の順に一行で書くようになっとる。
全ユーザに全データベースをいじらせるのを許可するには、
host    all    0.0.0.0    0.0.0.0    trust
こんなんに書けばよい。
192.168.0.2 から、パスワードを使って接続させるにはこうなる。
host    all    192.168.0.2    255.255.255.255    password
これを pg_hba.conf の最後の行に記述する。
そんでポスグレに設定ファイルを再度読み込ませる。
postgres$ pg_ctl reload
これで設定が反映されたはず。
おっと、一つ注意。
ポスグレのデーモン(だと思う) postmaster は -i オプションで起動されてないとネットからの接続は拒否されるんで確認しておくべし。
現在の状態は、
pg_ctl status
で調べられる。これで -i オプションがついてなかったら -i を付けて再起動させる。
postgres$ pg_ctl -o "-S -i" restart
こんな感じで再起動。詳細は pg_ctl のマニュアル見てね。

ユーザを登録する

次に、ユーザ watashi をポスグレに登録する。 ユーザを追加したり削除したりするコマンドがある。 ユーザ登録は createuser で、削除は dropuser なんやけど、 これらはポスグレの管理ユーザ postgres になって実行するようになっとる。コマンドだから一発楽チンかな?
他にも SQL コマンドでユーザ管理ができる。ここでは SQL コマンドを使ってみる。

ユーザを追加する SQL コマンドは CREATE USER です。
ユーザ watashi をパスワードをつけて登録させてみる。
postgres$ psql mydb

mydb=# CREATE USER watashi WITH PASSWORD 'jw8s0F';
管理ユーザから psql で mydb に接続し、パスワード jw8s0F を持つユーザを追加した。
ユーザ一覧は SELECT で表示できる。
mydb=# SELECT * FROM pg_user;
 usename  | usesysid | usecreatedb | usetrace | usesuper | usecatupd |  passwd  | valuntil
----------+----------+-------------+----------+----------+-----------+----------+----------
 postgres |        1 | t           | t        | t        | t         | ******** |
 watashi  |      101 | f           | f        | f        | f         | ******** |
(2 rows)
どんな権限がユーザに与えられてるか確認できるね。
ユーザの設定を変えるには ALTER USER を使う。
watashi のパスワードを変えてみる。
mydb=# ALTER USER watashi WITH PASSWORD 'dareda';
こんな感じ。
ユーザを削除するには DROP USER を使う。 watashi を削除してみる。
mydb=# DROP USER watashi;

mydb=# SELECT * FROM pg_user;
 usename  | usesysid | usecreatedb | usetrace | usesuper | usecatupd |  passwd  | valuntil
----------+----------+-------------+----------+----------+-----------+----------+----------
 postgres |        1 | t           | t        | t        | t         | ******** |
(1 rows)
消えとるね。消したんで再登録して次へと。

テーブルのアクセス権

次に、テーブルに対してアクセス権を与えないといかん。 テーブルを作っただけでは作った人しかいじれない。 watashi もいじれるように設定させる。
アクセス権の設定/解除は、 grant / revoke コマンドにより行います。
GRANT 権限 ON テーブル名 TO ユーザ名;
REVOKE 権限 ON テーブル名 FROM ユーザ名;
権限の種類には、SELECT、INSERT、UPDATE、DELETE、RULE、ALL がある。 , に続けて記述すれば複数の権限を与えられる。 ALL にすれば全ての権限を与えます。
テーブル maibo の全ての権限を watashi に与えるには次のようにすべし。
mydb=# GRANT all ON meibo TO watashi;

mydb=# GRANT all ON address_id_seq TO watashi;
meibo にはシーケンス値が設定されてるので address_id_seq にも権限を与えることをお忘れなく。
うーん。設定された権限を確認するには psql の \z コマンド。
mydb=# \z
         Access privileges for database "mydb"
     Table      |          Access privileges
----------------+--------------------------------------
 address_id_seq | {=,postgres=arwdRxt,watashi=arwdRxt}
 meibo          | {=,postgres=arwdRxt,watashi=arwdRxt}
(2 rows)
うーん。ユーザ postgres と watashi に権限 arwdRxt が与えられてる。= しかないのは一般ユーザで何も権限が与えられとらんという訳ね。

外から接続

準備ができたんで外からつなげてみる。
192.168.0.2 から psql コマンドで 192.168.0.1 のポスグレサーバにアクセス。 ポスグレの psql のバージョンによって、ユーザがログインする際につけるオプション記述が若干違うみたく、 -u と -U があるようや。詳しくは psql --help を見よ。ここではこんな感じでログインさせた。
$ telnet 192.168.0.2 ← よそのマシンにログインしーの、

postgres$ psql -h 192.168.0.1 -u mydb
Username: watashi    ← ユーザ名
Password:            ← パスワード

mydb=>               ← こんにちは
うはうは。うまく接続できました。
よそからデータを追加してみる。
mydb=> INSERT INTO meibo (name, tel, email) VALUES ('You', '345-7890', 'm@cc.net');

mydb=> SELECT * FROM meibo WHERE name = 'You';
 no|name|     tel|email   |modtime
---+----+--------+--------+-----------------------------
107|You |345-7890|m@cc.net|2003-02-06 15:08:06.211737-05
(1 row)
大成功の巻き。
('03.02.06)

Back