Mac使用DBeaver访问Kerberos环境下的Impala

1、文章编写目的

网上很多都是介绍Windows下如何用DBeaver 访问带kerberos的Impala, 很少有介绍Mac的下如何配置的,本人在Mac下配置时, 走了一些弯路, 记录一下, 供后来者参考

OS: macOS Mojave 10.14.6
DBeaver: 版本21.1.1.202106210813
Impala驱动: 2.5.34

3、kerberos认证

将服务器上的/etc/krb5.conf 文件放到mac /etc/krb5.conf, 将keytab文件放到本地任意目录下

  • krb5.conf文件内容
  • [libdefaults]
      renew_lifetime = 7d
      forwardable = true
      default_realm = ZETATEST.COM
      ticket_lifetime = 24h
      dns_lookup_realm = false
      dns_lookup_kdc = false
      default_ccache_name = /tmp/krb5cc_%{uid}
      #default_tgs_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
      #default_tkt_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5
    [logging]
      default = FILE:/var/log/krb5kdc.log
      admin_server = FILE:/var/log/kadmind.log
      kdc = FILE:/var/log/krb5kdc.log
    [realms]
      ZETATEST.COM = {
        admin_server = zetatest.com
        kdc = zetatest.com
    [domain_realm]
      .zetatest.com = ZETATEST.COM
      zetatest.com = ZETATEST.COM
    
  • kerberos认证命令
  • kinit -kt ~/Downloads/hive.service.keytab hive/gs-server-9559

    修改DBeaver配置

    修改DBeaver app中的dbeaver.ini文件, 在文件最后增加三行, 这个地方注意, java.security.krb5.conf 网上windows的教程配置的是"/etc/krb5.conf", mac需要去掉双引号

    # 允许程序从任意位置获取证书,而不是只能从已经存在的subject中获取证书
    -Djavax.security.auth.useSubjectCredsOnly=false
    # 制定krb5.conf的位置
    -Djava.security.krb5.conf=/etc/krb5.conf
    # 开启kerberos debug
    -Dsun.security.krb5.debug=true
    

    4、获取Impala JDBC驱动

    在Cloudera官网下载Impala的JDBC驱动包, 选择与impala server版本匹配的驱动包, 这里我选择2.5.34, 操作系统选择Mac, 下载需要登录, 注册信息随便填
    https://www.cloudera.com/downloads/connectors/impala/jdbc/2-5-34.html

    KrbRealm改为你自己的realm

    jdbc:impala://{host}:{port}/{database};AuthMech=1;KrbRealm=ZETATEST.COM;KrbHostFQDN={host};KrbServiceName=impala
    
  • 4.添加驱动jar
    选择标签, 点击添加文件, 将下载的驱动包解压, 其中的Cloudera_ImpalaJDBCXX_X.X.XX文件夹的全部jar添加进来, 点击找到类, 确认驱动类com.cloudera.impala.jdbc41.Driver存在
    image.png

    2.DBeaver客户需要配置Java Kerberos环境的相应参数, 注意-Djava.security.krb5.conf=/etc/krb5.conf不带双引号
    否则会报错如下