Greenplum身份验证方式-LDAP

本文记述Greenplum使用LDAP做身份验证的过程。

略过搭建LDAP服务器部分

gpdb master做设置

    Gpdb master 实际是作为ldap客户端,需要安装 # yum install -y openldap-clients

    Gpdb创建数据库用户user4,并对testdb.test1表有权限。

在LDAP服务器上向ldap中增加账户

创建ldif文件内容为

dn:dc=gp1,dc=idap

objectClass:top

objectClass:dcObject

objectClass:organization

dc:gp1

o:gp1

 

dn:ou=users,dc=gp1,dc=idap

objectClass:organizationalUnit

ou:users

 

dn:uid=user4-2,ou=users,dc=gp1,dc=idap

objectClass:inetOrgPerson

userid:user4

cn:user4-2

sn:user4-2

userPassword:passwd4-2

 

    调用命令 # ldapadd -x -W -D "cn=ldapadm,dc=idap" -f ./b.ldif

 

pg_hba.conf 配置文件

在pg_hba.conf里面有两种配置方式,

一种是将登录用户名作为dn的一部分,

host all user4 0.0.0.0/0 ldap ldapserver=idap-66 ldapprefix="uid=" ldapsuffix=",ou=users,dc=gp1,dc=idap"

 

另一种是用户名可以不在dn里面,这样更灵活一些(采用这种)

host all user4 10.47.0.153/32 ldap ldapserver=idap-66 ldapbasedn="uid=user4-2,ou=users,dc=gp1,dc=idap" ldapbinddn="cn=ldapadm,dc=idap" ldapbindpasswd="WOH/BJryZ1cdeG4dRpHyc9vS5dl70DYw" ldapsearchattribute="userid"

 

JDBC客户端代码

      Class.forName("org.postgresql.Driver");

      String url = "jdbc:postgresql://10.110.18.241/testdb";

      String pwd = "password123";

      Connection conn = DriverManager.getConnection(url, "user4", pwd);

 

身份验证的逻辑

    客户端将user4发送到greenplum,找到对应的配置项,即 host all user4 ** 。

    发现验证方式是ldap,即通过属性ldapserver dn binddn passwd等连接ldap,查找到user4-2条目(属性userid=user4) 则成功了第一步,第二步验证密码,即将jdbc客户端的密码与user4-2.userPassword 进行比较。

  数据库用户登录的密码不再是保存在数据库了。

  数据库用户登录的密码可以在ldap 上通过命令ldappasswd修改,即修改了属性userPassword的值

 

注意 这里密码从客户端到GPmaster是通过明文传输的。使用SSL通道更好些。

 

原文地址:https://www.cnblogs.com/fangjx/p/6396134.html