转载

使用高度安全的 Kerberos 将应用程序连接到 DB2

简介

如今,在线数据激增,当涉及到数据的隐私和安全性时,云中的数据是一个大问题。和以往任何时候相比,现在更有必要尽量减少,甚至消除安全漏洞,让通过线路共享的数据受到更好的保护。Kerberos 是一种网络身份验证协议,旨在为 “客户端-服务器” 应用程序提供强大的身份验证。在这里,我们将重点介绍利用 Kerberos 为使用 IBM Data Server Driver for JDBC and SQLJ、CLI 和 .NET 驱动程序的应用程序提供安全的身份验证。

回页首

Kerberos 是什么?

Kerberos 是一种网络身份验证协议,旨在为 “客户端-服务器” 应用程序提供一种强大的身份验证手段。

Kerberos 这个词来自 Cerberus,即希腊冥王 Hades 的三只头的看门狗。这种神话生物的三个头被比喻成组成 Kerberos 环境的三个关键实体:

  • 客户端 “用户-客户端” 机器
  • 密钥分发中心(KDC)
  • 服务器渲染服务

使用 Kerberos,客户端机器可以对服务器证明其身份,即使两者都在不安全的网络上也没问题。不需要在网络上传输用户 ID 和密码,在这里使用的是加密的票据。这些票据由称为 Kerberos 身份验证服务器的实体颁发。

Kerberos 使用两种类型的凭据进行身份验证:票据和鉴别码:

  • 票据 用于安全地将客户端的身份传递给颁发票据的服务器。服务器可以使用它所包含的信息来确保使用票据的客户端就是票据的颁发对象。票据一般适用于单个服务器和单个客户端。它包含客户端的名称和网络地址、服务器的名称、时间戳和会话密钥。该信息是用服务器的密钥加密的。客户端可以多次使用该票据来访问服务器,直到密钥过期。客户端无法解密票据,但它能够以加密形式将票据提交给服务器。当票据在网络上传输时,监听网络的人都无法读取或修改该票据。
  • 鉴别码 是和票据一起提供的附加凭证。每当客户端希望访问服务器时,都会由客户端生成鉴别码。鉴别码包含客户端的名称、时间戳和可选的附加会话密钥,这些全部都用客户端和服务器之间共享的会话密钥进行加密。不同于票据,鉴别码只能使用一次。不过,由于客户端可以根据需要生成鉴别码(它知道共享的密钥),所以使用鉴别码是没有问题的。

即使客户机和服务器都在不安全网络上,它们也能使用 Kerberos 相互限定对方的身份。

本教程将帮助读者在 Windows 上建立一个 Kerberos 环境,配置 DB2® 服务器,并配置客户端驱动程序,以便使用 Kerberos 验证用户身份。本文全文都会提及 “客户端驱动程序”。其中包括 IBM Data Server Drivers for JDBC and SQLJ (JCC Driver);IBM Data Server Driver for ODBC and CLI (CLI Driver);.NET 驱动程序;名为 CLPPlus 的一种交互式客户端工具,能够执行 SQL 语句、脚本并生成自定义报告。这些客户端驱动程序都打包在 IBM Data Server Driver Package (DS Driver) 中。DS Driver 包中含有用于各种编程语言环境的驱动程序和库。JCC 驱动程序也随 DB2 安装提供。

在下面的图 1 示出了端到端 Kerberos 身份验证技术,以及如何结合使用多个组件。

Kerberos 协议与 DB2、DB2 Connect 驱动程序(JCC、CLI、CLPPlus 工具)流程

使用高度安全的 Kerberos 将应用程序连接到 DB2

点击查看大图

关闭 [x]

Kerberos 协议与 DB2、DB2 Connect 驱动程序(JCC、CLI、CLPPlus 工具)流程

使用高度安全的 Kerberos 将应用程序连接到 DB2

上面所示的 Kerberos 协议流程如下:

  1. 应用程序可以通过使用任意一个 DB2 Connect™ 驱动程序来使用 Kerberos 技术,比如 JCC 驱动程序、CLI 驱动程序、.NET 驱动程序,或 CLPPlus 工具。CLPPlus 在内部使用 JCC API 来通过 Kerberos 进行身份验证。
  2. 第一次交换发生在客户端驱动程序和认证服务器之间。身份验证服务器对用户进行身份验证(例如,通过验证用户的 ID 和密码)。身份验证成功后,身份验证服务器获取用户的密钥,并返回一个票据授予票据(TGT),用它来获取凭据,授予对 DB2 服务器的访问权限。
  3. 在收到 TGT 后,客户端向票据授予服务器 (TGS) 发送一个请求(包含 TGT),请求服务票据。TGS 对 TGT 进行身份验证,并向客户端返回一个服务票据。
  4. 客户端现在拥有服务票据,这允许客户端与提供应用程序想从 DB2 服务器使用的服务的 DB2 服务器进行通信。DB2 服务器不需要联系 KDC 就可以验证服务票据。

回页首

配置 Kerberos 将它用于 Windows 上的 IBM Data Server Driver for JDBC and SQLJ

我们的 Kerberos 安装有一个 Windows Active Directory Domain Controller,充当密钥分发中心 (KDC)。为了让 Java™ 识别这个环境,需要在客户端和服务器端进行额外的配置,我们将稍后处理这些配置。

配置的三个基本领域

  • 配置 Kerberos KDC 或 Kerberos 服务器
  • 建立 DB2 数据库,使用 Kerberos 进行身份验证
  • 配置客户端驱动程序使用 Kerberos 身份验证

设置 KDC 的步骤

Kerberos KDC 是一个网络服务,它向 Active Directory 域中的用户和计算机提供会话票据和临时会话密钥。KDC 运行域控制器被作为 Active Directory 域服务 (AD DS) 的一部分。因此,在建立 AD DS 时,我们可以利用 Kerberos 的功能对请求访问 DB2 数据库的用户进行身份验证。DB2 数据库可以安装在该域中的任何机器上。在本设置中,我们使用 Windows Server 2008 R2 托管 KDC,而 DB2 服务器安装在 Windows Server 2012 R2 计算机上。

常见的环境设置

设置 KDC 和 DB2 服务器的前两个步骤对于所有客户端驱动程序都很常见。希望安装特定驱动程序的用户可以跳过下面相应的驱动程序部分。

创建一个 KDC

  1. 安装 Active Directory Domain Controller 。
  2. 配置 DNS 服务 。
  3. 设置域安全策略 。
  4. 创建一个新的域用户帐户 。
  5. 将一台机器添加到域中 。

设置 DB2 服务器

DB2 总是先查看本地安装,然后再查看域。因此,在安装 DB2 之前,请确保本地用户和域用户没有使用相同的名称(如果您打算创建一个名为 kerbuser 的域用户,请确保本地目录中不存在这个名称的本地用户)。

  1. 在任何连接到域的成员计算机上安装 DB2。
  2. 在新域名下重新启动此数据库服务器计算机。
  3. 使用新的用户登录到计算机。
  4. 在 DB2 服务器上,用所创建的域用户帐户启动 DB2。
  5. 更新 DB2 服务器到 Kerberos: db2 update dbm cfg 使用身份验证 Kerberos。
  6. 重新启动 DB2 服务器。

回页首

配置客户端驱动程序使用 Kerberos 身份验证

想要查看非 Java 驱动程序设置步骤的读者可以跳到IBM Data Server CLI Driver 设置。

设置 IBM Data Server Driver for JDBC and SQLJ

当某个客户端应用程序请求建立连接时,应该使用 TGT 执行此操作。如果没有提供用户 ID /密码,则应检查默认凭据缓存中是否存在 TGT。如果不存在 TGT,则会使用连接字符串中指定的用户 ID 和密码来获得 TGT。

获得 TGT

大多数情况下,会在数据库连接之前获得 TGT,而且两者是彼此独立的。通常情况下,通过从命令行发出命令 kinit ,可以得到 TGT。如果连接字符串中提供了用户 ID 和密码,则会假设是 DB2 明确获得了 TGT,从而获得 Kerberos 票据。

如果成功返回 TGT,则会获得一个 Kerberos 5 票据,并将它发送给 DB2 执行身份验证。如果身份验证通过,则会将连接返回给客户端。

在设置 JDBC 驱动程序之前,要解释几个术语:

  1. Java Authentication and Authorization Service (JAAS) :JAAS 是 DB2 所使用的 Kerberos 登录界面,用于在有提供客户端用户名和密码时获得 TGT。此登录界面需要一个 JAAS 配置文件,该文件指定 com.ibm.security.jgss.mech.krb5.Krb5JAASLoginModule 作为要使用的登录模块。
  2. IBM JGSS Provider :IBM JGSS 是一个 Java Generic Security Service Application Programming Interface (GSS-API) 框架,使用 Kerberos 5 作为底层的默认安全机制。JGSS API 有一个 Java kinit 工具。GSS-API 通过在主体之间传递凭据,使程序可以访问安全服务。使用 kinit 连接到 DB2 工具的语法如下:
    java com.ibm.security.krb5.tools.Kinit [-f] [-F] [-p] [-P] [-c cache name] [principal] [password]

    不同选项的含义是:

    • -f:可转发
    • -F:不可转发
    • -p:可代理
    • -P:不可代理
    • -c:缓存名称(即 FILE:D:/temp/mykrb5cc)
    • [principal]:主体名称 (qwedf qwedf@DB2TEST.com)
    • [password]:主体的 Kerberos 密码

    GSS-API 本身并没有提供任何安全性。相反,安全服务商通常以与其安全软件一起安装的库的形式来提供 GSS-API 实现。可以用 GSS-API 包装或加密敏感的应用程序消息,从而提供客户端和服务器之间的安全通信。GSS-API 包装提供的典型保护包括机密性(保密)和完整性(真实性)。GSS-API 还可以为远程用户或远程主机的身份提供本地认证。

  3. Kerberos 领域 :Kerberos 领域是存储 Kerberos 数据库的地方。Kerberos 领域中的每个成员都有一个被称为主体的惟一标识符。Kerberos 领域由 KDC 及其所有主体组成。该领域安全地驻留在一台主计算机上,但只读版本的 Kerberos 数据库可以驻留在其他 Kerberos 机器上。Kerberos 领域通常用大写字母域名表示。
  4. Kerberos 主体 :Kerberos 主体是 Kerberos 系统已知的服务或用户。每个 Kerberos 主体均以其主体名称标识。主体名称由三部分组成:服务或用户名称、实例名称,以及领域名称,格式如下: primary-name.instance-name@realm-name 。主名称可以是用户的名称、主机或服务的名称。DB2TEST.com 领域中的主体示例是 db2kuser@DB2TEST.com。

配置 IBM Data Server Driver for JDBC and SQLJ 驱动程序来使用 Kerberos

需要正确设置一些配置和策略文件,才可以执行 Kerberos 身份验证:

  1. 修改 Kerberos配置文件(比如 krb5.ini) :在 kinit

    过程中将会使用此文件。IBM JGSS 需要 Kerberos 配置文件。Kerberos 配置文件的默认名称和位置取决于使用的操作系统。按以下顺序搜索默认的配置文件:

    • 由 Java 属性 java.security.krb5.conf 引用的文件
    • /lib/security/krb5.conf
    • 在 Microsoft Windows 平台上:c:/winnt/krb5.ini
    • 在 Solaris 平台上:/etc/krb5/krb5.conf
    • 在其他 Unix 平台上:/etc/krb5.conf

    在 Kerberos 配置文件中,用户需要设置领域 domain_realm 和一些特性,比如 default_keytab_name、default_realm、kdc_timeout,等等。

    Windows 的示例 krb.ini 文件

    -***change this*** means to change this to fit your own setting.     [libdefaults] default_keytab_name  = c:/ibmjgss/config/krb5kt default_realm = DB2TEST.COM -> change this  default_tkt_enctypes  = rc4-hmac default_checksum  = rsa-md5 kdc_timesync            = 0 kdc_default_options     = 0x40000010 clockskew               = 300   check_delegate          = 0 ccache_type             = 3 kdc_timeout             = 10000000 [realms] DB2TEST.COM= {  -> change this  kdc = yourmachinewithKDC.db2test.com:88  -> change this  } [domain_realm] .db2test.com=DB2TEST.COM   -> change this  db2test.com=DB2TEST.COM  -> change this 
  2. 更新 JAAS 配置文件 :使用 JAAS 登录特性需要一个 JAAS 配置文件。可以在 /jre/lib/security/java.security 中将该文件指定为 Java 属性 java.security.auth.login.config 的值,或者将它指定为属性 login.config.url. 的值。将 java_home/jre/lib/security/java.security 修改如下:
    • 在 D:/kerberos(可以选择任意目录)中创建 jaas.conf

      示例 jaas.conf 文件内容

      JaasClient{ com.ibm.security.auth.module.Krb5LoginModule optional debug=true useDefaultCcache=false; };

      使用以下语法在 java.security 文件中配置 jaas.conflogin.config.url.1=file:D:/Kerberos/jaas.conf (使用 / 而不是 /)。

    • 如果该文件不存在,则添加或更新 security.provider.1=com.ibm.crypto.provider.IBMJCE
    • 如果上述文件不存在,则添加或更新 security.provider.2=com.ibm.security.jgss.IBMJGSSProvider
  3. 连接到 DB2
    1. 对于使用用户名和密码的连接 :设置您的应用程序在访问 DB2 数据库时所引用的数据源。
      • 对于使用用户名和密码的身份验证,您需要:
        • KerberosServerPrincipal:例如, user@DB2TEST.com (DB2TEST.com) 是域名,用您刚刚创建的域替换它)

        • SecurityMechanism:例如, com.ibm.db2.jcc.DB2BaseDataSource.KERBEROS_SECURITY (值是 11)

      示例代码

      DriverManager interface: java.util.Properties properties = new java.util.Properties(); properties.put("user", USER); properties.put("password", PASSWORD); properties.put("securityMechanism", new String("11"));//11 is the integer value for kerberos properties.put("KerberosServerPrincipal", "sample/machinename.db2test.com@DB2TEST.COM"); Class.forName("com.ibm.db2.jcc.DB2Driver"); String url = "jdbc:db2://serverName/STLEC1"; Connection con = DriverManager.getConnection(url, properties);  Datasource interface:c com.ibm.db2.jcc.DB2SimpleDataSource dataSource = new com.ibm.db2.jcc.DB2SimpleDataSource(); dataSource.setDatabaseName ("STLEC1"); dataSource.setServerName (serverName); dataSource.setDriverType (4); dataSource.setPortNumber (50000); dataSource.setSecurityMechanism(11); //11 is for kerberos dataSource.setKerberosServerPrincipal("sample/machinename.db2test.com@DB2TEST.COM"); Connection con = dataSource.getConnection (USER ,PASSWORD);
    2. 对于没有用户名和密码的连接 —对于没有用户名和密码的连接,可以使用 kinit

      流程,在该流程中,应用程序不必提供用户名和密码。用户主体在凭据缓存中保存其 Kerberos 凭据。用户凭据缓存的位置顺序如下:

      1. 由 Java 属性 KRB5CCNAME 引用的文件。
      2. 由环境变量 KRB5CCNAME 引用的文件。
      3. 在 Unix 系统上:/tmp/krb5cc_uid。
      4. (user.home)/krb5cc_(user.name)。
      5. (user.home)/krb5cc [如果无法获得 user.name]。

      设置您的应用程序在访问 DB2 数据库时引用的数据源。对于没有用户名和密码的身份验证{使用票据},您只需要:

      • KerberosServerPrincipal *(user)@DB2TEST.com(其中 DB2TEST.com 是域名,用您刚刚创建的域替换它)

      在本例中,您必须使用缓存,并使用 kinit 填充它。您不必在 java.security 文件中使用 jaas.conf

      1. 执行以下命令,启动 kinit:

        C:/SQLLIB/BIN>java com.ibm.security.krb5.internal.tools.Kinit

        db2kuser@DB2TEST.com 的密码:

      2. 输入密码,您会看到类似这样的一条消息:

        已完成!

        新的票据存储在缓存文件 C:/Users/db2kuser/krb5cc_db2kuser 中。

      3. 一旦不再需要它,则转至位置 'C:/Users/db2kuser/krb5cc_db2kuser,并删除所生成的缓存。

      没有用户名和密码的 DB2 连接的示例代码:

      DriverManager interface: java.util.Properties properties = new java.util.Properties(); properties.put("securityMechanism", new String("11")); //11 is the integer value for kerberos  properties.put("KerberosServerPrincipal", "machinename.db2test.com@DB2TEST.COM");  //the name DB2 registers with KDC.  Class.forName("com.ibm.db2.jcc.DB2Driver"); String url = "jdbc:db2://HOSTNAME/STLEC1"; Connection con = DriverManager.getConnection(url, properties);  Datasource interface: com.ibm.db2.jcc.DB2SimpleDataSource dataSource = new com.ibm.db2.jcc.DB2SimpleDataSource(); dataSource.setDatabaseName ("DBNAME; dataSource.setServerName (HOSTNAME); dataSource.setDriverType (4); dataSource.setPortNumber (50000); dataSource.setSecurityMechanism(11); //11 is for kerberos dataSource.setKerberosServerPrincipal("machinename.db2test.com@DB2TEST.COM""); //the name DB2 registers with KDC.  Connection con = dataSource.getConnection ();
    3. 对于使用委托的连接 :在多层的情况下,客户端可连接到一个服务器,而服务器又需要连接到一个后端服务器。为了获得对后端服务器的访问权限,客户端需要获得可以访问后端服务器的凭据,然后将它们传递给中间服务器,或者中间服务器需要获得可以访问后端服务器本身的凭据。最好是使用客户端的授权来获得凭据。在本例中,JCC T4 驱动程序使用来自另一个主体的委托凭据。用户需要在 DB2Configuration 中设置 securityMechanismKerberosServerPrincipal 属性性,并使用委托凭据来设置 GSSCredential。

      使用委托凭据连接的示例代码

      DriverManager interface: java.util.Properties properties = new java.util.Properties(); properties.put("securityMechanism", new String("11"));//11 is the integer value for kerberos properties.put("KerberosServerPrincipal", KerberosServerPrincipalName); DB2Configuration.setGSSCredential(delegatedCredential); Class.forName("com.ibm.db2.jcc.DB2Driver"); String url = "jdbc:db2://machineName/DBName"; Connection con = DriverManager.getConnection(url, properties);   Datasource interface: com.ibm.db2.jcc.DB2SimpleDataSource dataSource = new com.ibm.db2.jcc.DB2SimpleDataSource(); dataSource.setDatabaseName (DBName); dataSource.setServerName (ServerName); dataSource.setDriverType (4); dataSource.setPortNumber (50000); dataSource.setSecurityMechanism(11); //11 is for kerberos dataSource.setKerberosServerPrincipal(KerberosServerPrincipalNam); DB2Configuration.setGSSCredential(delegatedCredential); Connection con = dataSource.getConnection (username, password);

启用 CLPLUS 与 Kerberos 连接

  1. 启动 CLPPlus 命令窗口: Windows > Run > -clplus
  2. 在提示符下,键入 conn 并单击 Enter
  3. 在提示符下提供所有详细信息。
  4. 当提示某个用户的信息时,按照以下格式提供用户信息: db2kuser@DB2TEST.com
  5. 当提示输入某个主机名时,按照以下格式提供主机名: machineName.domainName ,在我们的示例中,主机名是 xxxmachine.db2test.com。

如果返回一个 SQL 提示,那么我们已成功使用 Kerberos 连接到数据库。

回页首

设置 IBM Data Server Driver for ODBC and CLI (CLI Driver)、.NET 驱动程序和 DB2 CLPlus

IBM Data Server Driver for ODBC and CLI 设置

要集合使用 CLI 驱动程序与 Kerberos,需要修改 db2cli.ini 文件。

在 CLI 中,用户名要指定完全限定域名用户,否则 DB2 会在 localSystem 中寻找用户,而且会失败,提示 "Local System Authority can't be located" 错误:

sqldriverconnect 1 0 "Authentication=KERBEROS;database=testKerb;hostname=9.xx.xx.xx;port=50000;uid=db2kuser@DB2TEST.COM;pwd=******;protocol=tcpip;" -3 235 SQL_DRIVER_NOPROMPT

示例 db2cli.ini 文件

; Comment lines start with a semi-colon.  [tstcli1x] uid=userid pwd=password autocommit=0 TableType="'TABLE','VIEW','SYSTEM TABLE'"  [tstcli2x] ; Assuming dbalias2 is a database in DB2 for MVS. SchemaList="'OWNER1','OWNER2',CURRENT SQLID"  [MyVeryLongDBALIASName] dbalias=dbalias3 SysSchema=MYSCHEMA  [Common] TargetPrincipal =HOST/machineName.domainname@DOMAINNAME trace=1 tracefilename=traceFileName

IBM Data Server .NET driver 设置

db2dsdriver.cfg 中的 Kerberos 参数必须设置为 testconn40 才可以获得成功。

示例 db2dsdriver.cfg 文件

<configuration> <dsncollection> <dsn alias="S" name="test1" host="9.xx.xx.xx" port="50000"> </dsn> </dsncollection> <databases> <database name="test1" host="9.184.112.161" port="50000"> <parameter name="UserID" value="db2kuser"/> </database> </databases> <parameters> <parameter name="Authentication" value="KERBEROS"/> </parameters> </configuration>

示例 testconn40 输出

C:/ProgramData/IBM/DB2/DB2COPY1/cfg>testconn40 Database=test1  Step 1:Printing version info .NET Framework version:4.0.30319.33440 64-bit DB2 .NET provider version:9.7.4.4 DB2 .NET file version:10.5.4.4 Capability bits:ALLDEFINED Build: s140325 Factory for invariant name IBM.Data.DB2 verified Elapsed:0.2500056  Step 2:DB2DSDRIVER_CFG_PATH env var: unset Validating db2dsdriver.cfg against db2dsdriver.xsd schema file C:/ProgramData/IBM/DB2/DB2COPY1/cfg/db2dsdriver.cfg against C:/SQLLIB/cfg/db 2dsdriver.xsd Elapsed:0.0156191  Step 3:Connecting using "Database=test1" Server type and version:DB2/NT64 10.05.0004 Elapsed:5.4218871  Step 4:Selecting rows from SYSIBM.SYSTABLES to validate existence of packages SELECT * FROM SYSIBM.SYSTABLES FETCH FIRST 5 rows only Elapsed:0.5625038  Step 5:Calling GetSchema for tables to validate existence of schema functions Elapsed:1.2500091

回页首

故障排除和技巧

  1. 消息: "[JGSS_DBG_CRED] main Credentials have expired"
    发生这种情况是因为使用了不再有效的凭据。
    解决方法: 在使用用户名和密码进行身份验证,并将 JAAS 的 debug 设置为 true 时,会看到这样的消息,可以尝试在 jaas.conf 文件中添加 useDefaultCcache=false
  2. 消息: "com.ibm.security.jgss.i18n.exception.RenewTGTIncompatible"
    在启用重用票据并且长时间没有获得重用票据时,可能会出现这种情况。您有可能设置了 reuseTGT=true ,而且 JAAS 重用了目前已过时的票据。从 jaas.conf 文件中删除 reuseTGT=true
  3. 消息: com.ibm.security.krb5.KrbException, status code: message:<your SPN name >
    这通常是配置问题。
    解决方法: 比较消息中的信息与 Kerberos 配置,并检查 SPN 是否与预期一致:
    • 使用该系统和 DNS 的完全限定主机名。
    • 注意区分大小写(DB2TEST.com 与 db2test.com 不一样)。
  4. 消息: Error calling function Protocol status: 1312
    指定的登录会话不存在。它可能已经被终止。
    解决方法: 如果在 JAAS 配置文件中指定 useTicketCache=true ,Java 会尝试从 Windows Local Security Authority (LSA) 获得凭据缓存 (ccache)。如果没有 ccache,那么 Java 会尝试 Kerberos 登录。在应用程序中提供用户名和密码,然后再试一次。
  5. 消息: Caught javax.security.auth.login.LoginException while using JAASLogin.No LoginModules configured for JaasClient.
    这意味着 jaas.conf 文件中存在问题。
    解决方法:
    • 改正 jaas.conf 文件内容。
    • 检查分号 ( ; ) 的位置。
    • 在 jaas.conf 文件中使用关键字 JaasClient。JaasClient 是区分大小写的关键字。
    • 更新 java.security 文件,使其指向 jaas.conf 文件的正确位置。
  6. 使用域 ID 的连接速度较慢: 在用 administrator 或其他 ID 登录后,连接速度较慢。
    这是因为 Windows 枚举用户 ID 所属的组导致了延迟。
    解决方法: 在 DB2 命令行中运行以下命令:
    1. db2set -g DB2_GRP_LOOKUP=LOCAL
    2. db2stop
    3. db2start
    然后再次尝试建立连接。
  7. 时钟同步: Kerberos 票据是有时间限制的,所以 KDC 和运行应用程序的客户机需要同步它们的时钟。
  8. Password length, 0, is not allowed.ERRORCODE=-4461, SQLSTATE=42815 exception
    如果应用程序发送一个空密码给 JCC 驱动程序进行 Kerberos 身份验证,那么 JCC 驱动程序会抛出该异常: Password length, 0, is not allowed.ERRORCODE=-4461, SQLSTATE=42815 。使用空密码不能创建用户帐号。空密码不符合标准的密码要求,所以 JCC 驱动程序不允许使用空密码 (""),也就是说,不允许使用零长度的密码。
    解决方法: 应用程序可以向 JCC 驱动程序传递一个有效密码或 null 密码。如果客户端应用程序没有设置有效的密码,建议您传递一个 'NULL' 来替代空 ("") 字符串,以规避这种情况。

回页首

结束语

Kerberos 是身份管理和安全领域中领先的行业标准之一。它是许多网络安全问题的可靠解决方案。本教程展示了如何可以结合使用 DB2 Connect 驱动程序与 Kerberos,实现 DB2 服务器中的安全身份验证。

正文到此结束
Loading...