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
- 用于IBM®Java:
- 通过应用程序将 "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 findjava.securityin 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:\winnt 或 C:\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系统管理员指南》中的安全部分。