11.10. 数据源安全性
数据源安全性指的是为数据源连接加密或模糊密码。这些密码可以在配置文件中以纯文本形式存储,但这代表存在安全风险。
您可以使用几种方法进行数据源安全性。以下是每个选项的示例。
使用安全域保护数据源
使用以下步骤通过安全域保护数据源:
创建新安全域。
/subsystem=security/security-domain=DsRealm:add(cache-type=default) /subsystem=security/security-domain=DsRealm/authentication=classic:add(login-modules=[{code=ConfiguredIdentity,flag=required,module-options={userName=sa, principal=sa, password=sa}}])/subsystem=security/security-domain=DsRealm:add(cache-type=default) /subsystem=security/security-domain=DsRealm/authentication=classic:add(login-modules=[{code=ConfiguredIdentity,flag=required,module-options={userName=sa, principal=sa, password=sa}}])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定义了数据源的安全域。以下 XML 提取是调用 CLI 命令的结果。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加新数据源。
data-source add --name=securityDs --jndi-name=java:jboss/datasources/securityDs --connection-url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 --driver-name=h2 --new-connection-sql="select current_user()"
data-source add --name=securityDs --jndi-name=java:jboss/datasources/securityDs --connection-url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 --driver-name=h2 --new-connection-sql="select current_user()"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在数据源上设置安全域。
data-source --name=securityDs --security-domain=DsRealm
data-source --name=securityDs --security-domain=DsRealmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重新加载服务器,使更改生效。
reload
reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您使用带有多个数据源的安全域,请在安全域中禁用缓存。这可以通过将 cache-type 属性的值设置为 none 来实现;但是,如果需要缓存,请对每个数据源使用单独的安全域。
以下 XML 提取显示了使用 DsRealm 保护的数据源。
有关使用安全域的更多信息,请参阅 如何配置身份管理。
使用密码库保护数据源
使用以下步骤,使用密码 vault 保护数据源:
为 ExampleDS 数据源设置密码库。
data-source --name=ExampleDS --password=${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}data-source --name=ExampleDS --password=${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新加载服务器以实施更改。
reload
reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
以下 XML 安全元素添加到使用密码 vault 保护的 ExampleDS 数据源。
<security>
<user-name>admin</user-name>
<password>${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}</password>
</security>
<security>
<user-name>admin</user-name>
<password>${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}</password>
</security>
有关使用 Password Vault 的更多信息,请参阅 JBoss EAP 如何配置服务器安全 指南中的 Password Vault 部分。
使用凭证存储保护数据源
您还可以使用凭证存储来提供密码。elytron 子系统提供创建凭据存储的功能,以安全地内部使用您的密码,在整个 JBoss EAP 中使用您的密码。您可以在 JBoss EAP 如何配置服务器安全指南 的 Credential Store 部分中找到关于创建和使用凭据存储的更多详细信息。
为 ExampleDS 添加凭证存储引用
/subsystem=datasources/data-source=ExampleDS:write-attribute(name=credential-reference,value={store=exampleCS, alias=example-ds-pw})
/subsystem=datasources/data-source=ExampleDS:write-attribute(name=credential-reference,value={store=exampleCS, alias=example-ds-pw})
使用身份验证上下文保护数据源
您还可以使用 Elytron 身份验证上下文提供用户名和密码。
使用以下步骤为数据源安全性配置和使用身份验证上下文。
删除
password和user-name。/subsystem=datasources/data-source=ExampleDS:undefine-attribute(name=password) /subsystem=datasources/data-source=ExampleDS:undefine-attribute(name=user-name)
/subsystem=datasources/data-source=ExampleDS:undefine-attribute(name=password) /subsystem=datasources/data-source=ExampleDS:undefine-attribute(name=user-name)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为数据源启用 Elytron 安全性。
/subsystem=datasources/data-source=ExampleDS:write-attribute(name=elytron-enabled,value=true) reload
/subsystem=datasources/data-source=ExampleDS:write-attribute(name=elytron-enabled,value=true) reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的凭证创建
authentication-configuration。身份验证配置包含您要数据源在建立连接时使用的凭证。以下示例使用对凭证存储的引用,但也可以使用 Elytron 安全域。
/subsystem=elytron/authentication-configuration=exampleAuthConfig:add(authentication-name=sa,credential-reference={clear-text=sa})/subsystem=elytron/authentication-configuration=exampleAuthConfig:add(authentication-name=sa,credential-reference={clear-text=sa})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
authentication-context。/subsystem=elytron/authentication-context=exampleAuthContext:add(match-rules=[{authentication-configuration=exampleAuthConfig}])/subsystem=elytron/authentication-context=exampleAuthContext:add(match-rules=[{authentication-configuration=exampleAuthConfig}])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新数据源以使用身份验证上下文。
以下示例更新了
ExampleDS以使用身份验证上下文。/subsystem=datasources/data-source=ExampleDS:write-attribute(name=authentication-context,value=exampleAuthContext) reload
/subsystem=datasources/data-source=ExampleDS:write-attribute(name=authentication-context,value=exampleAuthContext) reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果没有设置
authentication-context属性,并且elytron-enabled属性设置为true,JBoss EAP 将使用当前上下文进行身份验证。
使用 Kerberos 保护数据源
要使用 kerberos 身份验证保护数据源,需要以下配置:
- Kerberos 在数据库服务器上配置。
- JBoss EAP 主机服务器具有数据库服务器的 keytab 条目。
使用 kerberos 保护数据源:
将 JBoss EAP 配置为使用 kerberos。
/system-property=java.security.krb5.conf:add(value="/path/to/krb5.conf") /system-property=sun.security.krb5.debug:add(value="false") /system-property=sun.security.spnego.debug:add(value="false")
/system-property=java.security.krb5.conf:add(value="/path/to/krb5.conf") /system-property=sun.security.krb5.debug:add(value="false") /system-property=sun.security.spnego.debug:add(value="false")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于调试,请将
sun.security.krb5.debug和sun.security.spnego.debug的值改为true。在生产环境中,建议将值设置为false。配置安全性。
您可以使用旧的安全或 Elytron 安全性来保护数据源。
使用带有旧安全的 kerberos :
配置 infinispan 缓存,以定期从缓存中删除过期的票据。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下属性定义票据过期:
-
Lifespan : 间隔(以毫秒为单位)从 KDC 请求新证书。
将 lifespan属性的值设置为仅小于 KDC 定义的生命周期。 -
max-idle: Interval,以毫秒为单位,如果不使用有效票据,则应从缓存中删除有效的票据。 -
max-entries:在缓存中保留的最大 kerberos 票据副本数。该值对应于数据源中配置的连接数量。
-
Lifespan : 间隔(以毫秒为单位)从 KDC 请求新证书。
创建安全域。
batch /subsystem=security/security-domain=KerberosDatabase:add(cache-type=infinispan) /subsystem=security/security-domain=KerberosDatabase/authentication=classic:add /subsystem=security/security-domain=KerberosDatabase/authentication=classic/login-module="KerberosDatabase-Module":add(code="org.jboss.security.negotiation.KerberosLoginModule",module="org.jboss.security.negotiation",flag=required, module-options={ "debug" => "false", "storeKey" => "false", "useKeyTab" => "true", "keyTab" => "/path/to/eap.keytab", "principal" => "PRINCIPAL@SERVER.COM", "doNotPrompt" => "true", "refreshKrb5Config" => "true", "isInitiator" => "true", "addGSSCredential" => "true", "credentialLifetime" => "-1"}) run-batchbatch /subsystem=security/security-domain=KerberosDatabase:add(cache-type=infinispan) /subsystem=security/security-domain=KerberosDatabase/authentication=classic:add /subsystem=security/security-domain=KerberosDatabase/authentication=classic/login-module="KerberosDatabase-Module":add(code="org.jboss.security.negotiation.KerberosLoginModule",module="org.jboss.security.negotiation",flag=required, module-options={ "debug" => "false", "storeKey" => "false", "useKeyTab" => "true", "keyTab" => "/path/to/eap.keytab", "principal" => "PRINCIPAL@SERVER.COM", "doNotPrompt" => "true", "refreshKrb5Config" => "true", "isInitiator" => "true", "addGSSCredential" => "true", "credentialLifetime" => "-1"}) run-batchCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 Microsoft JDBC 驱动程序用于 SQL 服务器时,在
module-options中添加属性和值"wrapGSSCredential" appear "true"。 -
要进行调试,请将
module-options中的debug属性的值更改为true。
-
将 Microsoft JDBC 驱动程序用于 SQL 服务器时,在
在 Elytron 中使用 kerberos :
在 Elytron 中设置 kerberos 工厂。
/subsystem=elytron/kerberos-security-factory=krbsf:add(debug=false, principal=PRINCIPAL@SERVER.COM, path=/path/to/keytab, request-lifetime=-1, obtain-kerberos-ticket=true, server=false)
/subsystem=elytron/kerberos-security-factory=krbsf:add(debug=false, principal=PRINCIPAL@SERVER.COM, path=/path/to/keytab, request-lifetime=-1, obtain-kerberos-ticket=true, server=false)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于调试,请添加属性和值
debug = true。有关支持的属性列表,请参阅如何配置服务器 安全指南中的 Kerberos 安全工厂 属性 部分。
创建身份验证配置以使用 kerberos 工厂。
/subsystem=elytron/authentication-configuration=kerberos-conf:add(kerberos-security-factory=krbsf)
/subsystem=elytron/authentication-configuration=kerberos-conf:add(kerberos-security-factory=krbsf)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建身份验证上下文。
/subsystem=elytron/authentication-context=ds-context:add(match-rules=[{authentication-configuration=kerberos-conf}])/subsystem=elytron/authentication-context=ds-context:add(match-rules=[{authentication-configuration=kerberos-conf}])Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 kerberos 保护数据源.
如果使用 Elytron:
将数据源配置为使用身份验证上下文。
/subsystem=datasources/data-source=KerberosDS:add(connection-url="URL", min-pool-size=0, max-pool-size=10, jndi-name="java:jboss/datasource/KerberosDS", driver-name=<jdbc-driver>.jar, elytron-enabled=true, authentication-context=ds-context, allow-multiple-users=false, pool-prefill=false, pool-use-strict-min=false, idle-timeout-minutes=2)
/subsystem=datasources/data-source=KerberosDS:add(connection-url="URL", min-pool-size=0, max-pool-size=10, jndi-name="java:jboss/datasource/KerberosDS", driver-name=<jdbc-driver>.jar, elytron-enabled=true, authentication-context=ds-context, allow-multiple-users=false, pool-prefill=false, pool-use-strict-min=false, idle-timeout-minutes=2)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置特定于供应商的连接属性。
/subsystem=datasources/data-source=KerberosDS/connection-properties=<connection-property-name>:add(value="(<kerberos-value>)")
/subsystem=datasources/data-source=KerberosDS/connection-properties=<connection-property-name>:add(value="(<kerberos-value>)")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例: Oracle 数据库的连接属性
/subsystem=datasources/data-source=KerberosDS/connection-properties=oracle.net.authentication_services:add(value="(KERBEROS5)")
/subsystem=datasources/data-source=KerberosDS/connection-properties=oracle.net.authentication_services:add(value="(KERBEROS5)")Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 kerberos 身份验证时,建议在数据源中使用以下属性和值:
-
pool-prefill=false -
pool-use-strict-min=false -
idle-timeout-minutes
有关支持的属性列表,请参阅 数据源属性。