11.10. 数据源安全性


数据源安全性指的是为数据源连接加密或模糊密码。这些密码可以在配置文件中以纯文本形式存储,但这代表存在安全风险。

您可以使用几种方法进行数据源安全性。以下是每个选项的示例。

使用安全域保护数据源

使用以下步骤通过安全域保护数据源:

  1. 创建新安全域。

    /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 Toggle word wrap

    定义了数据源的安全域。以下 XML 提取是调用 CLI 命令的结果。

     <security-domain name="DsRealm" cache-type="default">
      <authentication>
        <login-module code="ConfiguredIdentity" flag="required">
          <module-option name="userName" value="sa"/>
          <module-option name="principal" value="sa"/>
          <module-option name="password" value="sa"/>
        </login-module>
      </authentication>
    </security-domain>
    Copy to Clipboard Toggle word wrap
  2. 添加新数据源。

    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 Toggle word wrap
  3. 在数据源上设置安全域。

    data-source --name=securityDs --security-domain=DsRealm
    Copy to Clipboard Toggle word wrap
  4. 重新加载服务器,使更改生效。

    reload
    Copy to Clipboard Toggle word wrap
注意

如果您使用带有多个数据源的安全域,请在安全域中禁用缓存。这可以通过将 cache-type 属性的值设置为 none 来实现;但是,如果需要缓存,请对每个数据源使用单独的安全域。

以下 XML 提取显示了使用 DsRealm 保护的数据源。

<datasources>
  <datasource jndi-name="java:jboss/datasources/securityDs"
    pool-name="securityDs">
    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
      <driver>h2</driver>
      <new-connection-sql>select current_user()</new-connection-sql>
      <security>
        <security-domain>DsRealm</security-domain>
      </security>
    </datasource>
</datasources>
Copy to Clipboard Toggle word wrap

有关使用安全域的更多信息,请参阅 如何配置身份管理

使用密码库保护数据源

使用以下步骤,使用密码 vault 保护数据源:

  1. 为 ExampleDS 数据源设置密码库。

    data-source --name=ExampleDS
    --password=${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}
    Copy to Clipboard Toggle word wrap
  2. 重新加载服务器以实施更改。

    reload
    Copy to Clipboard Toggle word wrap

以下 XML 安全元素添加到使用密码 vault 保护的 ExampleDS 数据源。

<security>
  <user-name>admin</user-name>
  <password>${VAULT::ds_ExampleDS::password::N2NhZDYzOTMtNWE0OS00ZGQ0LWE4MmEtMWNlMDMyNDdmNmI2TElORV9CUkVBS3ZhdWx0}</password>
</security>
Copy to Clipboard Toggle word wrap

有关使用 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})
Copy to Clipboard Toggle word wrap

使用身份验证上下文保护数据源

您还可以使用 Elytron 身份验证上下文提供用户名和密码。

使用以下步骤为数据源安全性配置和使用身份验证上下文。

  1. 删除 passworduser-name

    /subsystem=datasources/data-source=ExampleDS:undefine-attribute(name=password)
    /subsystem=datasources/data-source=ExampleDS:undefine-attribute(name=user-name)
    Copy to Clipboard Toggle word wrap
  2. 为数据源启用 Elytron 安全性。

    /subsystem=datasources/data-source=ExampleDS:write-attribute(name=elytron-enabled,value=true)
    
    reload
    Copy to Clipboard Toggle word wrap
  3. 为您的凭证创建 authentication-configuration

    身份验证配置包含您要数据源在建立连接时使用的凭证。以下示例使用对凭证存储的引用,但也可以使用 Elytron 安全域。

    /subsystem=elytron/authentication-configuration=exampleAuthConfig:add(authentication-name=sa,credential-reference={clear-text=sa})
    Copy to Clipboard Toggle word wrap
  4. 创建 authentication-context

    /subsystem=elytron/authentication-context=exampleAuthContext:add(match-rules=[{authentication-configuration=exampleAuthConfig}])
    Copy to Clipboard Toggle word wrap
  5. 更新数据源以使用身份验证上下文。

    以下示例更新了 ExampleDS 以使用身份验证上下文。

    /subsystem=datasources/data-source=ExampleDS:write-attribute(name=authentication-context,value=exampleAuthContext)
    
    reload
    Copy to Clipboard Toggle word wrap
    注意

    如果没有设置 authentication-context 属性,并且 elytron-enabled 属性设置为 true,JBoss EAP 将使用当前上下文进行身份验证。

使用 Kerberos 保护数据源

要使用 kerberos 身份验证保护数据源,需要以下配置:

  • Kerberos 在数据库服务器上配置。
  • JBoss EAP 主机服务器具有数据库服务器的 keytab 条目。

使用 kerberos 保护数据源:

  1. 将 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")
    Copy to Clipboard Toggle word wrap

    对于调试,请将 sun.security.krb5.debugsun.security.spnego.debug 的值改为 true。在生产环境中,建议将值设置为 false

  2. 配置安全性。

    您可以使用旧的安全或 Elytron 安全性来保护数据源。

    • 使用带有旧安全的 kerberos :

      1. 配置 infinispan 缓存,以定期从缓存中删除过期的票据。

        batch
        /subsystem=infinispan/cache-container=security:add(default-cache=auth-cache)
        /subsystem=infinispan/cache-container=security/local-cache=auth-cache:add()
        /subsystem=infinispan/cache-container=security/local-cache=auth-cache/expiration=EXPIRATION:add(lifespan=3540000,max-idle=3540000)
        /subsystem=infinispan/cache-container=security/local-cache=auth-cache/memory=object:add(size=1000)
        run-batch
        Copy to Clipboard Toggle word wrap

        以下属性定义票据过期:

        • Lifespan : 间隔(以毫秒为单位)从 KDC 请求新证书。将 lifespan 属性的值设置为 仅小于 KDC 定义的生命周期。
        • max-idle: Interval,以毫秒为单位,如果不使用有效票据,则应从缓存中删除有效的票据。
        • max-entries :在缓存中保留的最大 kerberos 票据副本数。该值对应于数据源中配置的连接数量。
      2. 创建安全域。

        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-batch
        Copy to Clipboard Toggle word wrap
        • 将 Microsoft JDBC 驱动程序用于 SQL 服务器时,在 module-options 中添加属性和值 "wrapGSSCredential" appear "true "。
        • 要进行调试,请将 module-options 中的 debug 属性的值更改为 true
    • 在 Elytron 中使用 kerberos :

      1. 在 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)
        Copy to Clipboard Toggle word wrap
      2. 创建身份验证配置以使用 kerberos 工厂。

        /subsystem=elytron/authentication-configuration=kerberos-conf:add(kerberos-security-factory=krbsf)
        Copy to Clipboard Toggle word wrap
      3. 创建身份验证上下文。

        /subsystem=elytron/authentication-context=ds-context:add(match-rules=[{authentication-configuration=kerberos-conf}])
        Copy to Clipboard Toggle word wrap
  3. 使用 kerberos 保护数据源.

    • 如果使用 Elytron:

      1. 将数据源配置为使用身份验证上下文。

        /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 Toggle word wrap
      2. 配置特定于供应商的连接属性。

        /subsystem=datasources/data-source=KerberosDS/connection-properties=<connection-property-name>:add(value="(<kerberos-value>)")
        Copy to Clipboard Toggle word wrap

        示例: Oracle 数据库的连接属性

        /subsystem=datasources/data-source=KerberosDS/connection-properties=oracle.net.authentication_services:add(value="(KERBEROS5)")
        Copy to Clipboard Toggle word wrap

      使用 kerberos 身份验证时,建议在数据源中使用以下属性和值:

      • pool-prefill=false
      • pool-use-strict-min=false
      • idle-timeout-minutes

    有关支持的属性列表,请参阅 数据源属性

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat