オープンソースで作る Java+DB

特集 オープンソースで作るJava+DB
第1回 PostgreSQLで学ぶSQLデータベースの操作 (14/15)


ユーザーに対してデータベースアクセス権を与える

 ユーザー作成をしただけでは、アクセス権が与えられておらず、PostgreSQLに接続したとしても、テーブルに対する読み書きができない。

 そこでテーブルに対するアクセス権を与える必要がある。ここでは作成した「dbuser」ユーザーに対して、先にsampledbデータベース内に作成したKeijiIDシーケンス、およびKeijiテーブルに関する、アクセス権を与えよう。アクセス権を与えるには、psqlコマンドからGRANT文を実行する。次のようにpsqlコマンド実行をしよう。

# su - postgres
$ psql sampledb

 とりあえず全権限を与えてよいのであれば、次のようにすればよい。

sampledb=# GRANT ALL ON KeijiID TO dbuser;
GRANT
sampledb=# GRANT ALL ON Keiji TO dbuser;
GRANT

 これにより、dbuserユーザーは、KeijiIDシーケンスとKeijiテーブルに対するアクセス権限が備わったことになる。

One Point!

実際にアプリケーションを構築する場合には、ユーザーに全権限を与えず、参照権や追加権のみ、または更新権のみを与えるよう細かく制御する必要がある。たとえば、通販システムを構築するのであれば、注文を書き込む「orderユーザー」と、注文を参照する「salesユーザー」という2つのユーザーを作り、前者には書き込み権限だけを、後者には全権限を与え、注文するシステムではorderユーザーとしてデータベースにアクセスするようにしたい。
このように制御権を設定すれば、万が一アプリケーションにセキュリティホールが存在しても、orderユーザーでアクセスする限りは既存の注文が参照されず、ユーザーの注文データが漏洩してしまう心配がない。

TCP/IPでアクセスできるようにする

 以上で準備が整ったので、TCP/IPからアクセスできるようにする。そのためには、先に説明したhba.confファイルに、次の設定項目を追加すればよい。

host  all  all  127.0.0.1  255.255.255.255 md5

 上記の設定内容は、127.0.0.1からのTCP/IPの接続を許可し、その際にmd5を利用したパスワード認証を行うという意味だ。パスワードが正しく合致しない場合には、アクセスが拒否される。

One Point!

ここでは例として認証方式に「md5」を利用したが、crypt(cryptによる暗号方式)やpassword(暗号化しないプレーンテキストのパスワード)、krb4(Kerberos V4)、krb5(Kerberos V5)などの認証方式もサポートされている。

 もちろん、IPアドレスの部分を変更して127.0.0.1以外からも受け付けるようにすれば、他のコンピュータからネットワークを介してPostgreSQLを利用することができる。hda.confファイルを変更した場合には、設定を反映させるためPostgreSQLの再起動をしよう。

# /etc/rc.d/init.d/postgresql restart

 実際に、TCP/IP経由で正しく接続できるかどうかを確かめてみよう。psqlコマンドは、標準でUNIXドメインソケットを使うが、「-h」オプションを使うとTCP/IP接続となる。また、ユーザー名指定は「-U」オプションで併用すればよい。

$ psql -h 127.0.0.1 -U dbuser sampledb

One Point!

-hオプションで、他のコンピュータのIPアドレスを指定すれば、リモートで動作しているPostgreSQLに接続することもできる。

 次のようにパスワードが求められるので、ユーザー作成時に設定したパスワード(ユーザーdbuserに対するパスワード)を入力しよう。

Password:

 正しく入力すれば、次のようにpsqlコマンドのコマンド入力待ち状態となる。

Welcome to psql 7.3.3, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit sampledb=>

 前述したdbuserユーザーには、KeijiIDシーケンスとKeijiテーブルに全権限を与えておいたため、ここからINSERT文、SELECT文、UPDATE文、DELETE文を用いて、このシーケンスとテーブルに関する操作ができる。

 アプリケーションからデータベースを利用する場合には、このように何らかのユーザーを作成し、そのユーザー権限でアクセスするようにするのが一般的だ。

 設定ファイルを変更すれば、アプリケーションからpostgresユーザーでデータベースを利用することもできる。しかしpostgreユーザーは、PostgreSQLにおいて、いかなる操作もできるスーパーユーザーであるため、そのような構成は危険だ。アプリケーションからデータベースを利用する場合には、最低限必要なアクセス権だけを備えたユーザーを作り、そのユーザーを使ってアクセスするのが望ましい。

前のページ | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 次のページ

[大澤文孝,ITmedia]