DBeaver鏈接kerberos安全認證的Phoenix集群
最近公司的CDH集群,啟動了kerberos安全認證,所有的用戶驗證全部需要依賴kerberos來進行。之前的裸奔集群,總算有了一些安全認證的功能,雖然網上很多人都說不推薦使用kerberos進行集群的安全認證,但是也沒有說明使用哪種安全認證的方式會更好,目前比較現成的安全認證方式也只知道kerberos。
使用kerberos認證之后,原本的Phoenix sqlline可以在存有kerberos緩存票據的機器上直接運行,鏈接方式,啟動命令等,都和沒有啟動kerberos之前一樣。只需要執行klist命令,能夠顯示kerberos主體信息即可。但是使用Windows進行遠程鏈接Phoenix時出現了問題。首先Windows上沒有kerberos客戶端,不能直接緩存票據。其次,如果使用kinit命令進行鏈接的話,必須知道kerberos中的主體密碼,而CDH的kerberos主體是CM自主生成的,我們也不知道密碼。所以我們只能使用kertab的形式進行鏈接。
明確了使用keytab的形式進行鏈接,我們首先嘗試了Linux sqlline的形式鏈接,測試完全沒有問題,使用一切正常。但是使用Windows的DBeaver遠程鏈接時要怎么做呢?
百度搜索了一下,只搜到了Phoenix鏈接kerberos安全認證集群時的jdbc url鏈接格式,其他的都不是Phoenix的鏈接設置了。嘗試了幾天,終於使用DBeaver鏈接成功了,記錄下來,分享給有需要的人。
1.安裝Windows的kerberos的客戶端
下載Windows的kerberos客戶端進行安裝,直接百度下載地址吧,版本貌似比較古老
安裝的時候注意,如果公司的電腦不給管理員權限的話,記得選擇中間的【custom】安裝選項,將kerberos的客戶端安裝到自己用戶能夠訪問的文件夾下,確保后續的客戶端能夠正常使用。
2.設置Windows端的KDC配置文件
將集群的kerberos配置文件內容拷貝到C:\ProgramData\MIT\Kerberos5\krb5.ini文件中
如果該文件不存在,那么自己創建出來即可,當然了,也可以通過配置環境變量來改變該配置文件的路徑
KRB5_CONFIG=E:/apps/kerberos_conf/krb5.ini
3.配置DBeaver的啟動參數
因為DBeaver使用的是JAVA的鏈接方式鏈接Phoenix集群,所以我們可以通過-D參數傳入一些配置來設置程序,已到達url模板中不能傳遞KDC服務器配置的問題
打開DBeaver的安裝目錄,打開dbeaver.ini配置文件,添加以下內容
-Djava.security.krb5.conf=C:\ProgramData\MIT\Kerberos5\krb5.ini
傳遞KDC的配置信息給JVM,具體的krb5.ini的目錄,請根據自己的情況進行修改。
4.修改DBeaver中Phoenix鏈接驅動的URL模板
修改dbeaver中,Phoenix鏈接器的URL模板:
jdbc:phoenix [ :<zookeeper quorum> [ :<port number> [ :<root node> [ :<principal> [ :<keytab file> ] ] ] ] ]
上面是Phoenix官網給出的JDBC鏈接模板,並且說明了如果需要后續參數,必須要列出前面的所有參數。但是進過查看源碼,明確了網上所說的兩點錯誤:
不需要列出前面的所有參數,但是hbase-site.xml文件中需要有所有的信息
Phoenix-client.jar中需要有core-site.xml,hdfs-site.xml,hbase-site.xml三個集群配置文件
Windows的keytab路徑可以使用帶盤符的路徑,如:E:\hbase.keytab
修改為自己集群的鏈接即可,進行測試發現已經可以鏈接到kerberos安全認證的集群了。