使用带TLS/SSL的LDAP认证

通过对pg_hba.conf文件条目增加参数,可以用一台LDAP服务器以及可选的加密连接来控制对Greenplum数据库的访问。

Greenplum数据库支持在LDAP认证中用TLS/SSL协议加密与LDAP服务器的通信:

  • 使用STARTTLS和TLS协议的LDAP认证 – STARTTLS从一个明文连接(不加密)的连接开始并且把它升级到一个安全的连接(加密)。
  • 使用安全连接和TLS/SSL(LDAPS)的LDAP认证 – Greenplum数据库使用以LDAP服务器所用协议为基础的TLS或者SSL协议。

如果没有指定协议,Greenplum数据库会使用明文连接与LDAP服务器通信。

要使用LDAP认证,Greenplum数据库的Master主机必须被配置为LDAP客户端。有关配置LDAP客户端的信息请见LDAP文档。

注意: Greenplum数据库中捆绑的PgBouncer连接池已经被修改为对通过该连接池连接连接Greenplum数据库的用户支持LDAP或者活动目录认证。具体指导请见对PgBouncer设置LDAP认证

启用使用STARTTLS和TLS的LDAP认证

要启用用TLS协议的STARTTLS,在pg_hba.conf文件中增加一个ldap行并且指定ldaptls参数的值为1。默认端口是389。在这个例子中,认证方法参数包括ldaptls参数。

  1. ldap ldapserver=myldap.com ldaptls=1 ldapprefix="uid=" ldapsuffix=",ou=People,dc=example,dc=com"

用ldapport参数可以指定一个非默认的端口。在这个例子中,认证方法包括ldaptls参数和指定端口为550的ldapport参数。

  1. ldap ldapserver=myldap.com ldaptls=1 ldapport=500 ldapprefix="uid=" ldapsuffix=",ou=People,dc=example,dc=com"

启用使用安全连接和TLS/SSL的LDAP认证

要启用用TLS/SSL的安全连接,把ldaps://作为前缀添加到参数ldapserver中指定的LDAP服务器名上。默认端口是636。

这个ldapserver参数的例子指定一个安全连接并且为LDAP服务器myldap.com指定TLS/SSL协议。

  1. ldapserver=ldaps://myldap.com

要指定一个非默认端口,可以在LDAP服务器名后面加一个冒号(:)和端口号。这个This example ldapserver参数的例子包括ldaps://前缀和非默认端口550。

  1. ldapserver=ldaps://myldap.com:550

用一个系统级的OpenLDAP系统配置认证

如果有一个系统级的OpenLDAP系统并且在pg_hba.conf文件中配置登录使用带TLS或者SSL的LDAP,登录可能会失败并且给出下面的消息:

  1. could not start LDAP TLS session: error code '-11'

要把一个现有的OpenLDAP系统用于认证,Greenplum数据库必须被设置为使用该LDAP服务器的CA证书来验证用户证书。在Master和后备主机上按照下列步骤配置Greenplum数据库:

  1. 从活动目录或者LDAP服务器中复制base64编码的根CA链文件到Greenplum数据库的Master和后备Master主机。这个例子使用目录/etc/pki/tls/certs。
  2. 以root用户切换到复制该CA证书文件的目录,为OpenLDAP生成哈希:

    1. # cd /etc/pki/tls/certs
    2. # openssl x509 -noout -hash -in <ca-certificate-file>
    3. # ln -s <ca-certificate-file> <ca-certificate-file>.0
  3. 用指定的CA证书目录和证书文件为Greenplum数据库配置一个OpenLDAP配置文件。

    作为root用户编辑OpenLDAP配置文件 /etc/openldap/ldap.conf:

    1. SASL_NOCANON on
    2. URI ldaps://ldapA.example.priv ldaps://ldapB.example.priv ldaps://ldapC.example.priv
    3. BASE dc=example,dc=priv
    4. TLS_CACERTDIR /etc/pki/tls/certs
    5. TLS_CACERT /etc/pki/tls/certs/<ca-certificate-file>

    注意: 为了让证书验证成功,证书中的主机名必须匹配URI属性中的一个主机名。否则,还必须在该文件中增加TLS_REQCERT allow。

  4. 作为gpadmin用户编辑/usr/local/greenplum-db/greenplum_path.sh并且添加下列行。

    1. export LDAPCONF=/etc/openldap/ldap.conf

注解

如果在一个pg_hba.conf文件条目中出现下列情况,Greenplum数据库会记录一个错误:

  • 如果同时指定ldaps://前缀和ldaptls=1参数。
  • 如果同时指定ldaps://前缀和ldapport参数。

为LDAP认证启用加密通信只会加密Greenplum数据库和LDAP服务器之间的通信。

有关加密客户端连接的信息请见加密客户端/服务器连接

例子

这些例子是一个pg_hba.conf文件中的条目。

这个例子指定进行LDAP认证时,在Greenplum数据库和LDAP服务器之间的通信上不做加密。

  1. host all plainuser 0.0.0.0/0 ldap ldapserver=myldap.com ldapprefix="uid=" ldapsuffix=",ou=People,dc=example,dc=com"

这个例子指定进行LDAP认证时,在Greenplum数据库和LDAP服务器之间的通信上使用STARTTLS和TLS协议。

  1. host all tlsuser 0.0.0.0/0 ldap ldapserver=myldap.com ldaptls=1 ldapprefix="uid=" ldapsuffix=",ou=People,dc=example,dc=com"

这个例子指定进行LDAP认证时,在Greenplum数据库和LDAP服务器之间的通信使用安全连接和TLS/SSL协议。

  1. host all ldapsuser 0.0.0.0/0 ldap ldapserver=ldaps://myldap.com ldapprefix="uid=" ldapsuffix=",ou=People,dc=example,dc=com"

上级主题: 配置客户端认证