温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github:
https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
1 文档编写目的
参考Fayson前面的文章《0469-如何使用DBeaver访问Kerberos环境下的Impala》,环境变量也配置了,krb5.conf文件也准备好了,但在使用SQL客户端攻击DBeaver访问Kerberos环境下的Impala时总是提示“Unable to connect server:GSSinitiate failed”异常。本篇文章主要详细的介绍在Window客户端使用DBeaver访问Kerberos环境下的Impala配置异常分析及处理过程。
- 测试环境
1.CDH6.1.0
2.DBeaver5.2.5
3.Impala JDBC驱动2.6.2.1003
2 前置环境说明
按照前面的文章介绍以及在客户机上配置好了Kerberos的环境变量和Krb5.conf文件,具体如下:
1. C:ProgramDataKerberos5目录下下的krb5.ini配置文件
![ffdd650dae5407cf5721a45e4cd3c4bc.png](https://i-blog.csdnimg.cn/blog_migrate/a220fd27a2eb4c37ab1881bb45851093.jpeg)
2.已配置好的KRB_CONF和KRB5CCNAME全局环境变量
![d11d2a9a83d85c9ce782e44e34ff8085.png](https://i-blog.csdnimg.cn/blog_migrate/d213a220322075e8b902e806a632c0c1.jpeg)
注意:KRB5CCNAME所指定的路径必须存在,如果不存在则自己手动创建。krb5ccname缓存文件则可以不用创建。
3.Kerberos客户端测试成功
![ae66bef413a7ebe21312c8061e073317.png](https://i-blog.csdnimg.cn/blog_migrate/8b66947e0fbee03530af480bd563552b.jpeg)
3异常描述及分析
完成上述的Kerberos客户端配置后,接下来按照之前的文档《0469-如何使用DBeaver访问Kerberos环境下的Impala》配置DBeaver访问Kerberos环境下的Impala出现如下异常提示:
![fdf5f8099a393e72d537d53aa3c318b3.png](https://i-blog.csdnimg.cn/blog_migrate/e20d8508f285f76f0adb94e08d12ec25.jpeg)
由于在配置中开启了访问Kerberos的Debug模式,可以通过DBeaver的客户端日志进行分析(DBeaver客户端日志一般放在当前用户默认的workspace目录下)
![a43c51df744a2497a4ec5584180187d9.png](https://i-blog.csdnimg.cn/blog_migrate/33256ddf22bb69e73de8a171730b9dbf.jpeg)
通过客户端日志看到如下信息,在krb5.ini配置文件中指定了KDC服务为sgpx123-321,但在日志中仍然在通过getKDCFromDNS查找dns地址,并且日志中显示”send:kdc=ZL-DC01”,ZL-DC01为当前客户端的DNSServer地址,说明加载的krb5.ini文件中并未正确查找到KDC服务地址。
4异常解决
通过在DBeaver的配置文件dbeaver.ini配置中直接指定KDC和Reaml参数
![367f59e795e3248710c7744c7c633209.png](https://i-blog.csdnimg.cn/blog_migrate/cb7325021cb96d5dceea7f335bec634f.jpeg)
重启DBeaver客户端然后再次连接Kerberos环境下的Impala,添加URL模板
jdbc:impala://{host}:{port}/{database};AuthMech=1;KrbRealm=FAYSON.COM;KrbHostFQDN={host};KrbServiceName=impala;KrbAuthType=2
![b0392fc7b82bc18775026cce00c6d381.png](https://i-blog.csdnimg.cn/blog_migrate/8211a8f9427bba7690df8507a803d743.jpeg)
设置要访问的Impala主机和库名
![f146e7c667f72f951846df0724242236.png](https://i-blog.csdnimg.cn/blog_migrate/b4ab453badf907c0c645182056c0e92d.jpeg)
完成上述配置后,点击“测试连接”
![eef2c08060d9325849859e4c9053506a.png](https://i-blog.csdnimg.cn/blog_migrate/81756d0617f86b7a603536a97c8d53ef.jpeg)
打开创建成功的数据库连接显示如下
![6cb6c232dd7222c1fda4ef6deb73e45c.png](https://i-blog.csdnimg.cn/blog_migrate/391277d9fe3c1bfbd82d0be2dfc7d40f.jpeg)
5其它异常
在配置Impala JDBC连接是指定的是ImpalaDaemon的ip地址,进行测试连接时报如下错误:
![7e0506b0165ee9344ec333ffae327461.png](https://i-blog.csdnimg.cn/blog_migrate/a416fa68f59594689c573d4c25a4ce0a.jpeg)
查看DBeaver客户端日志有如下异常:
![3038bc46fcde6e460b69f4f11a5ec92d.png](https://i-blog.csdnimg.cn/blog_migrate/6cc7b0bfaf9ccecad1d993d85a5d759a.jpeg)
在异常日志中发现在指定Impala Daemon服务端的Principal账号时是通过impala/10.1xx.2xx.xx@FAYSON.COM,说明通过JDBC URL中指定的参数,最终拼装的服务端Principal账号异常导致问题。
解决方法:
通过将ImpalaDaemon节点的IP地址修改为hostname,访问正常。
6总结
1. 关于DBeaver使用krb5.conf文件,认证失败通过源码的分析发现,由于KDC服务器使用的hostname为短名称而非标准的FQDN格式导致,无法通过krb.conf的信息组装成正确的KDC服务的hostname,所以这里可以直接指定java.security.krb5.kdc和java.security.krb5.reaml参数来解决该问题。
2. 在访问Kerberos环境的Impala时,需要根据JDBC携带的参数拼装访问Impala Daemon服务的Principal账号,如果指定IP地址则会导致拼装的Principal在KDC数据库中找不到,所以JDBC参数指定时需要使用Impala Daemon节点的hostname。
参考:
http://www.cnblogs.com/lixiaolun/p/8317146.html