このセクションではデータベースを使ってユーザー名とパスワードを検証・検索する方法を説明します。
この例では、組み込まれているDerbyデータベースを使って SecurityDatabase という名前の新しいデータベースを作ります。以下のステップではデータベースとテーブルを作り、サンプル・データをロードし、コネクション・プールを作る手順を要約します。データベースへコネクション・プールを定義するための詳細な方法はConfiguring database poolsセクションに記載されています。
データベースの作成とサンプル・データのロード
- 左側の Console Navigation メニューから Database Manager をクリックします。
- Create DB: フィールドに SecurityDatabase と入力し、Create をクリックします。
- Use DB: プルダウン・メニューから SecurityDatabase を選択し、以下のコマンドを入力して Run SQL をクリックします。
create table users
(username varchar(15),
password varchar(15));
create table groups
(username varchar(15),
groupname varchar(15));
insert into users values('userone','p1');
insert into users values('usertwo','p2');
insert into users values('userthree','p3');
insert into groups values('userone','admin');
insert into groups values('usertwo','admin');
insert into groups values('userthree','user');
コネクション・プールの作成
- 左側の Console Navigation メニューから Database Pools をクリックします。
- Using the Geronimo database pool wizard をクリックします。
- データベース・プール名に SecurityDatabasePool と入力します。
- database pool typeプルダウン・メニューから Derby embedded XA を選択し、Next をクリックします。
- Driver JAR スクロール・ボックスから org.apache.geronimo.configs/system-database/2.0.1/car を選択します。
- DB user name と passwordは 空白 にします。
- Databaseに SecurityDatabase と入力します。
- Deploy をクリックします。
新規セキュリティ・レルムの追加
新規にセキュリティ・レルムを作成するには Security Realms ポートレットで Add new security realm をクリックします
Name of Security Realm: フィールドに derby_security_realm と入力し、Realm type: プルダウン・メニューから Database (SQL) Realm を選択して Next をクリックします。
以下の画面でログイン・モジュールを構成します。冒頭の2つのフィールドは利用しているデータベースにより異なる値を入力する必要があるでしょう。今回はembedded Derby database を使用しますので、ユーザーとグループを入手するためのSQLは下記のようになります。
User SELECT SQL: select username, password from users where username=?
Group SELECT SQL: select username, groupname from groups where username=?
ユーザーとグループを検索するSQLステートメントを入力したら、前のステップで作成したデータベース・コネクション・プールを Database Pool プルダウン・メニューから選択してください。下記を参考に必要なフィールドに値を追加して Next をクリックします。
Database Pool: SecurityDatabasePool
以下の手順を踏めば、このレルムに対するログインの試みを監査しモニターできます。また設定した期間内に失敗したログインの回数に基づき、アカウントをロックアウトするように構成することもできます。Store Password を有効にすれば、ユーザーのパスワードを"Subject"内のプライベート・クリデンシャルに格納できます。また Naming Credential も有効にすれば、ユーザーのパスワードのみならずユーザーの名前もプライベート・クリデンシャルに格納できます。
ここまでで新しいセキュリティ・レルムを構成してきました。次は構成をテストしてデプロイしましょう。Test a Login をクリックします。
データベースから読み取れる有効なユーザー名とパスワードを入力し Next をクリックします。
ログイン成功を示す確認メッセージが表示されたら Deploy Realm をクリックしてこの構成をサーバーにロードします。
これでDerbyデータベース内のユーザー名とパスワードを使った、新規に完全に構成されたセキュリティ・レルムが完成しました。
このレルムの初回の検証時にエラーが発生した場合は、画面やログに SQL Exception: Failed to start database ...
が出ているかもしれません。これはDerbyの既知の問題で、Geronimoをリスタートすれば新規データベースとの通信が正しく行えるようになります。
以下はこのセキュリティ・レルムのデプロイメント・プランの例です。Geronimo管理コンソールを使う方法以外に、このサンプルをファイル(derby_security_realm.xml)に保存して 1.9.3. Deployer tool - デプロイヤー・ツール を使って以下のコマンドを実行する方法もあります。
<geronimo_home>\bin\deploy --user system --password manager deploy <realm_path>\derby_security_realm.xml
一旦セキュリティ・レルムを作ってしまえば、usageリンクから、そのレルムをアプリケーションで使用するためのサンプルを参照できます。