3.2. 配置安全域以使用数据库
与 LDAP 类似,安全域可以配置为使用数据库通过登录模块进行身份验证和授权。
3.2.1. 数据库登录模块
Database 登录模块是基于 Java 数据库连接(JDBC)登录模块,支持身份验证和角色映射。如果用户名、密码和角色信息存储在关系数据库中,则使用此登录模块。
这可以通过以预期格式提供对逻辑表的引用,包含主体和角色。例如:
Table Principals(PrincipalID text, Password text) Table Roles(PrincipalID text, Role text, RoleGroup text)
Principals
表将用户 PrincipalID
与有效密码关联,PrincipalID 将用户 PrincipalID 与其
角色集 相关联
。用于用户权限的角色必须包含在 Roles
的 RoleGroup
列值的一行中。
表是逻辑的,用户可以指定登录模块使用的 SQL 查询。唯一的要求是 java.sql.ResultSet
具有与前面描述的 Principals
和 Roles
表相同的逻辑结构。表和列的实际名称无关,因为根据列索引访问结果。
为了说明此概念,请考虑一个包含已声明的表格 (Principals
和 Roles
)的数据库。以下语句使用以下数据填充表:
-
PrincipalID
java
,在Principals
表中密码为echoman
-
PrincipalID
java
,角色在 Roles表
中的RolesRoleGroup
中名为Echo
-
PrincipalID
java
,角色在Roles
表中的CallerPrincipalRoleGroup
中具有名为 caller-java
的角色
有关 Database 登录模块配置选项的完整列表,请参阅 JBoss EAP 登录模块参考中的 Database 登录模块部分。
3.2.1.1. 配置安全域以使用数据库登录模块
在将安全域配置为使用 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))
用于添加数据库登录模块的 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