一、配置greenplum用户
编辑greenplum用户配置文件,导入到openldap中:
#添加greenplum分支,用于存放greenplum相关用户和组信息
dn: ou=greenplum,dc=bigdata,dc=ly
ou: greenplum
objectClass: top
objectClass: organizationalUnit
#添加greenplum用户分组
dn: cn=People,ou=greenplum,dc=bigdata,dc=ly
cn: People
objectClass: organizationalRole
#添加greenplum用户信息
#admin账户
dn: uid=admin,cn=People,ou=greenplum,dc=bigdata,dc=ly
objectClass: inetOrgPerson
uid: admin
sn: admin
cn: admin
userPassword: {SSHA}yuSYmdRGPsfCx4R5LfBLPHPCn+uhtG2B
#train账户
dn: uid=train,cn=People,ou=greenplum,dc=bigdata,dc=ly
objectClass: inetOrgPerson
uid: train
sn: train
cn: train
userPassword: {SSHA}yuSYmdRGPsfCx4R5LfBLPHPCn+uhtG2B
#添加system分组,用户存储系统用户,提供外界访问的openldap用户
dn: cn=System,ou=greenplum,dc=bigdata,dc=ly
cn: System
objectClass: organizationalRole
#添加gp分组的只读权限
dn: uid=gp_read,cn=System,ou=greenplum,dc=bigdata,dc=ly
objectClass: inetOrgPerson
uid: gp_read
sn: gp_read
cn: gp_read
userPassword: {SSHA}yuSYmdRGPsfCx4R5LfBLPHPCn+uhtG2B
#添加gp分组的读写权限
dn: uid=gp_write,cn=System,ou=greenplum,dc=bigdata,dc=ly
objectClass: inetOrgPerson
uid: gp_write
sn: gp_write
cn: gp_write
userPassword: {SSHA}yuSYmdRGPsfCx4R5LfBLPHPCn+uhtG2B
执行如下命令,将gp的账户信息导入到openldap中:
ldapadd -x -D "cn=admin,dc=bigdata,dc=ly" -w 1234 -f gp_user.ldif -H ldap://10.100.203.117:18888
配置ou=greenplum,dc=bigdata,dc=ly条目数据的访问权限,编辑文件kylin_acl.ldif文件,添加内容如下,设置用户uid=gp_read,cn=System,ou=kylin,dc=bigdata,dc=ly对ou=greenplum,dc=bigdata,dc=ly只用只读权限,uid=gp_write,cn=System,ou=kylin,dc=bigdata,dc=ly有读写权限。
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to dn.subtree="ou=greenplum,dc=bigdata,dc=ly"
by dn.base="uid=gp_read,cn=System,ou=greenplum,dc=bigdata,dc=ly" read
by dn.base="uid=gp_write,cn=System,ou=greenplum,dc=bigdata,dc=ly" write
by * auth
执行如下命令,将配置导入到配置文件中去:
ldapmodify -x -D "cn=config" -w 1234 -f gp_acl.ldif -H ldap://10.100.203.117:18888
二、配置整合greenplum
配置greenplum整合openldap有两种方式,一种方式将登录的用户名作为dn的一部分,另外一种是用户名不在dn中,这样更加灵活,如下便是两种配置方式。推荐使用方式二进行配置greenplum整合openldap。
- 方式一:在master的postgresql上修改配置/data/greenplum/master/gpseg-1/pg_hba.conf,添加如下内容:
host all all 0.0.0.0/0 ldap ldapserver=10.100.203.117 ldapport=18888 ldapprefix="uid=" ldapsuffix=",cn=People,ou=greenplum,dc=bigdata,dc=ly"
- 方式二:在master的postgresql上修改配置/data/greenplum/master/gpseg-1/pg_hba.conf,添加如下内容:
host all all 0.0.0.0/0 ldap ldapserver=10.100.203.117 ldapport=18888 ldapbasedn="cn=People,ou=greenplum,dc=bigdata,dc=ly" ldapbinddn="uid=gp_read,cn=System,ou=greenplum,dc=bigdata,dc=ly" ldapbindpasswd="1234" ldapsearchattribute="uid"
不管采用方式一还是方式二配置greenplum整合openldap,均需要重新加载配置:
pg_ctl reload -D /data/greenplum/master/gpseg-1/
当openldap用户连接greenplum时,需要事先在greenplum创建相应的用户,否则无法连接到greenplum。
psql
#创建用户角色,并赋给登入权限
create role admin with login
#为该角色赋表的权限
grant all on table foo to admin
#退出greenplum
\q
#登入greenplum
psql -d gptest -h 10.100.203.140 -p 5432 -U admin -W
#查询所有的表
\dt
#执行查询操作
select * from foo limit 10;