Greenplum身份驗證方式-Kerberos

記述驗證Greenplum使用Kerberos作登陸身份驗證的過程java

略過kerberos服務端配置過程。linux

 

基礎環境(linux)sql

  10.110.18.84  idap-server-84.idap.com    安裝了全部kerberos服務數據庫

  10.110.18.241 idap-241           gpdb master服務器

  10.110.18.67  idap-67             模擬gpdb客戶端登陸gpdbide

 

kerberos用戶應如是設置(postgresql和gpdb文檔)post

對數據庫來講須要設置兩個kerberos帳號,測試

一個是數據庫用戶名,固然這個用戶是在數據庫裏面實際建立好的ui

好比數據庫用戶爲user4,則設置帳號爲 user4@IDAP.COM ,格式是username@realm name;url

一個是postgres,這個名字對應於master上的postgresql.conf中 krb_srvname = 'postgres' ,

則設置帳號爲 postgres/idap-241@IDAP.COM,格式是postgres/svrname@realm name

 

操做系統基本設置

  作主機間互信(idap-server-84 的root與 idap-241的用戶(root,gpadmin))

  修改/etc/hosts文件

      kerberos server增長

        10.110.18.241 idap-241

      gpdb master 增長

        10.110.18.84 idap-server-84.idap.com

  時鐘同步(idap-server-84 與 idap-241)  ntp

 

配置過程:

  kerberos服務端配置

    

#kadmin.local

kadmin.local: addprinc user4@IDAP.COM

kadmin.local:addprinc postgres/idap-241@IDAP.COM

kadmin.local: xst -k gpdb-user4-7.keytab user4@IDAP.COM postgres/idap-241@IDAP.COM

 

而後複製生成的gpdb-user4-7.keytab到241上。由於是在gpadmin用戶下使用,全部最好是拷貝到gpadmin home目錄下且擁有全部權限

不然可能有以下錯誤 kinit: Permission denied while getting initial credentials

複製/etc/krb5.conf文件到241 /etc/下

  

  kerberos客戶端(gpdb master)

安裝krb5客戶端

  #yum install krb5-libs krb5-workstation

從kerberos server 拷貝 /etc/krb5.conf文件到/etc/

安裝票據(gpadmin用戶下執行)

$kdestroy -A

$kinit -k -t /home/gpadmin/gpdb-user4-7.keytab postgres/idap-241@IDAP.COM

$kinit -k -t /home/gpadmin/gpdb-user4-7.keytab user4@IDAP.COM

kinit順序多是有關的,驗證失敗留意是否有以下提示 provided user name (user4) and authenticated user name (postgres/idap-241) do not match

gpdb master配置

建立數據庫用戶 user4

修改postgresql.conf

  krb_server_keyfile = '/home/gpadmin/gpdb-user4-7.keytab'

修改pg_hba.conf

  host all all 0.0.0.0/0 gss include_realm=0 krb_realm=IDAP.COM

重啓gpdb服務,使配置生效

 

PSQL登陸驗證(在master上)

  [gpadmin@idap-241 ~]$ psql -U user4 -h idap-241 template1

 

JDBC登陸驗證(在master上)

  建立配置文件文件 ~/.java.login.config ,路徑和名稱可有可無

pgjdbc{

com.sun.security.auth.module.Krb5LoginModule required

doNotPrompt=true

useKeyTab=true

keyTab="/home/gpadmin/gpdb-user4-7.keytab"

useTicketCache=true

debug=true

principal="user4@IDAP.COM"

useFirstPass=true

isInitiator=true

client=true;

};

Java代碼

String url = "jdbc:postgresql://idap-241/testdb?kerberosServerName=postgres&jaasApplicationName=pgjdbc&user=user4";

Connection conn = DriverManager.getConnection(url);

//注意這裏沒有要求輸入密碼;注意這裏的user和pgjdbc config中配置的帳號是同樣的。

注意 由於建立帳號爲 postgres/idap-241@IDAP.COM ,因此這裏也得用idap-241拼接URL,不然提示 服務器不匹配。好奇怪的感受。

  測試

    $java -jar App1.jar

 

JDBC登陸驗證(在67機器上)

  安裝kerberos客戶端,並配置票據

    #yum install krb5-libs krb5-workstation

    從kerberos服務器拷貝/etc/krb5.conf 到/etc/krb5.conf

    從241拷貝keytab文件到/root/下

    修改67 /etc/hosts 增長

      10.110.18.84 idap-server-84.idap.com

      10.110.18.241 idap-241

    [root@hostname67 ~]# kinit -k -t gpdb-user4-7.keytab postgres/idap-241@IDAP.COM

    [root@hostname67 ~]# kinit -k -t gpdb-user4-7.keytab user4@IDAP.COM

  建立 /root/pgjdbc.login.conf 文件

內容爲

pgjdbc{

com.sun.security.auth.module.Krb5LoginModule required

doNotPrompt=true

useKeyTab=true

keyTab="/root/gpdb-user4-7.keytab"

useTicketCache=true

debug=true

principal="user4@IDAP.COM"

useFirstPass=true

isInitiator=true

client=true;

};

  測試java客戶端

    [root@hostname67 ~]# java -Djava.security.auth.login.config=/root/pgjdbc.login.conf -jar App1.jar

 

基礎知識很重要,官網文檔很重要,細節很重要。測試遇到的坑多來自不夠細心,胡亂假設,基礎知識不通,文檔看的不細

相關文章
相關標籤/搜索