3.2. データベースを使用するようにセキュリティードメインを設定する手順
LDAP と同様に、セキュリティードメインはログインモジュールを使用して認証および承認にデータベースを使用するように設定できます。
3.2.1. Database ログインモジュール
Database ログインモジュールは、認証とロールマッピングをサポートする JDBC (Java Database Connectivity) ベースのログインモジュールです。このログインモジュールは、ユーザー名、パスワード、およびロール情報がリレーショナルデータベースに格納される場合に使用されます。
このログインモジュールは、想定される形式のプリンシパルおよびロールが含まれる論理テーブルへの参照を提供して動作します。以下に例を示します。
Table Principals(PrincipalID text, Password text) Table Roles(PrincipalID text, Role text, RoleGroup text)
Table Principals(PrincipalID text, Password text) Table Roles(PrincipalID text, Role text, RoleGroup text)
Principals
テーブルは、PrincipalID
ユーザーと有効なパスワードを、Roles
テーブルは PrincipalID
ユーザーとそのロールセットを関連付けます。ユーザーのパーミッションに使用するロールは、Roles
の roleGroup
コラムの値が含まれる行に追加する必要があります。
ユーザーがログインモジュールが使用する SQL クエリーを指定できる点で、これらのテーブルは論理的であるといえます。唯一の要件は、java.sql.ResultSet
に、先程説明した Principals
と Roles
テーブルと同じ論理構造を使用する必要があることです。テーブルとコラムの実際の名前は、コラムインデックスに基づいて結果にアクセスするため、重要ではありません。
この概念を明確化するには、すでに宣言済みの Principals
と Roles
の 2 つのテーブルが含まれるデータベースを思い浮かべてください。以下のステートメントでは、テーブルに以下のデータが投入されます。
-
Principals
テーブルにはPrincipalID
がjava
でパスワードがechoman
のデータを投入 -
Roles
テーブルのRolesRoleGroup
にはPrincipalID
がjava
でロールがEcho
のデータを投入 -
Roles
テーブルのCallerPrincipalRoleGroup
にはPrincipalID
がjava
でロールがcaller-java
のデータを投入
Database ログインモジュールの設定オプションの完全リストは、JBoss EAP ログインモジュールのリファレンスの Database ログインモジュール を参照してください。
3.2.1.1. Database ログインモジュールを使用するようにセキュリティードメインを設定する手順
Database ログインモジュールを使用するようにセキュリティードメインを設定する前に、データソースを適切に設定する必要があります。
JBoss EAP でのデータソースの作成および設定に関する詳細は、JBoss EAP設定ガイドのデータソース管理 を参照してください。
データソースを適切に設定した後に、Database ログインモジュールを使用するようにセキュリティードメインを設定できます。以下の例は、MyDatabaseDS
という名前のデータソースが作成済みで、以下で構築されるデータベースを使用して適切に設定されていることが前提です。
CREATE TABLE Users(username VARCHAR(64) PRIMARY KEY, passwd VARCHAR(64)) CREATE TABLE UserRoles(username VARCHAR(64), role VARCHAR(32))
CREATE TABLE Users(username VARCHAR(64) PRIMARY KEY, passwd VARCHAR(64))
CREATE TABLE UserRoles(username VARCHAR(64), role VARCHAR(32))
Database ログインモジュールを追加する CLI コマンド
/subsystem=security/security-domain=testDB:add /subsystem=security/security-domain=testDB/authentication=classic:add /subsystem=security/security-domain=testDB/authentication=classic/login-module=Database:add(code=Database,flag=required,module-options=[("dsJndiName"=>"java:/MyDatabaseDS"),("principalsQuery"=>"select passwd from Users where username=?"),("rolesQuery"=>"select role, 'Roles' from UserRoles where username=?")]) reload
/subsystem=security/security-domain=testDB:add
/subsystem=security/security-domain=testDB/authentication=classic:add
/subsystem=security/security-domain=testDB/authentication=classic/login-module=Database:add(code=Database,flag=required,module-options=[("dsJndiName"=>"java:/MyDatabaseDS"),("principalsQuery"=>"select passwd from Users where username=?"),("rolesQuery"=>"select role, 'Roles' from UserRoles where username=?")])
reload