JDBC客户端的Kerberos验证

如果您的环境使用Kerberos验证用户对数据库的访问,请配置JDBC客户端以管理授权票据。

JDBC驱动程序负责获取Kerberos票据,以验证用户对Netezza®数据库的访问。 这与 ODBC 和 OLE DB 环境中的行为不同,在 OLE DB 环境中,客户端应用程序负责获取票据。

在JDBC环境中,JDBC客户端必须满足某些最低要求。 执行以下步骤:

  • 确保客户端系统安装了以下 Java™ 版本:
    • 适用于11.2.2.0至11.2.2.5Java1.7或更高版本。
    • 适用于11.2.2.5及以上版本Java/OpenJDK11。
    • 对于11.2.1.1 及更低版本的 Java1.6。
    • 适用于11.2.1.9及以上版本Java/OpenJDK11。
  • 根据所使用的 Java 提供程序,更改 "login.conf文件中的登录模块类名:
    • 用于IBM®Java: com.ibm.security.auth.module.Krb5LoginModule
    • 对于OracleJava: com.sun.security.auth.module.Krb5LoginModule
  • 通过应用程序将 "java.security.auth.login.config系统属性设置为 "login.conf文件路径,或编辑 "<JAVA_HOME>/jre/lib/security/java.security文件,添加以下一行:
    login.config.url.1=file:<LOGIN_CONF_FILE_PATH>
    请注意: In Windows, you can find java.security in the path <JAVA_HOME>\conf\security\java.security.
  • 将数据源连接参数中krbLoginModule名称的值指定为 "login.conf文件中 "loginModule的名称。 您必须提供此值,因为 "loginContext的登录方法会从 "login.conf文件中读取 "loginModule信息,并使用其中提到的类来进一步验证。

    请参考以下示例 "login.conf,并确保已在系统中创建。 在本例中,krbLoginModule的名称是 "loginModuleName

    loginModuleName {
         com.sun.security.auth.module.Krb5LoginModule required
         debug = true storeKey = false;
    };
    
    默认登录模块名称为 "EntryModuleName
    注意:在 Windows 环境下,要从指定的缓存中获取票据,需要在 "login.conf中使用 "useTicketCache=true选项。
  • 将 "java.security.krb5.conf系统属性设置为Kerberos配置文件名,或将配置文件复制到客户端系统的默认位置。
    在 UNIX 和Linux®系统中,配置文件名为 "krb5.conf,在 Windows 系统中,文件名为 "krb5.ini。 下表列出了不同平台上Kerberos配置文件的默认位置:
    表 1. Kerberos配置文件的默认位置
    平台 缺省位置
    IBM AIX® /etc/krb
    惠普安腾 /etc
    不在 System z® 或PowerPC®上运行的Linux /etc
    IBM z Systems 上的 Linux /etc
    PowerPC上的Linux /etc
    Oracle Solaris /etc/krb
    Windows C:\winntC:\windows
    注意:如果使用 MIT 提供的Kerberos,则 "krb5.ini默认位于 "C:\ProgramData\MIT\Kerberos5位置。

    更多信息,请参阅 Kerberos 配置文件 ( http://www.ibm.com/support/knowledgecenter/SS7JFU_7.0.0/com.ibm.websphere.express.doc/info/exp/ae/rsec_SPNEGO_config_krb5.html?cp=SS7JFU_7.0.0%2F1-15-2-314 )。

此外,如果您使用IBMJava 运行时环境,并且有多个位于不同域中的Netezza Performance Server系统,则与其中一些系统的JDBC客户端连接可能会失败,并出现以下错误:
major string: General failure, unspecified at GSSAPI level
minor string: Error: java.lang.Exception: Error: java.lang.Exception: No credential
如果出现这种情况,请更新客户端Kerberos配置文件,在其中加入 "[domain_realm]定义,以确定需要访问的所有域和控制身份验证请求的Kerberos领域。 例如,如果Netezza Performance Server系统配置在east.company.com和west.company.com域内,且Kerberos领域为MYKRB5.COMPANY.COM,则在Kerberos配置文件中添加以下 "[domain_realm]定义:
[domain_realm]
.company.com = MYKRB5.COMPANY.COM
company.com = MYKRB5.COMPANY.COM
您可以为 "east.company.com和 "west.company.com指定一个条目,但由于域名中有一个共同部分(company.com),您可以指定共同域名。 如果域名是唯一的,如 east.com 和 west.com ,请为系统所在位置指定每个唯一域名。 Netezza Performance Server 系统所在的位置。

有关配置Netezza Performance Server系统以使用Kerberos身份验证的更多信息,请参阅《IBM Netezza系统管理员指南》中的安全部分。