特集 オープンソースで作る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]