前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库PostrageSQL-LDAP 认证

数据库PostrageSQL-LDAP 认证

作者头像
cwl_java
发布2020-11-24 15:00:08
7170
发布2020-11-24 15:00:08
举报
文章被收录于专栏:cwl_Javacwl_Java

20.10. LDAP 认证

这种认证方法操作起来类似于password,只不过它使用 LDAP 作为密码验证方法。LDAP 只被用于验证用户名/口令对。因此,在使用 LDAP 进行认证之前,用户必须已经存在于数据库中。

LDAP 认证可以在两种模式下操作。在第一种模式中(我们将称之为简单绑定模式),服务器将绑定到构造成prefix username suffix的可区分名称。通常,prefix参数被用于指定 cn=或者一个活动录环境中的DOMAIN\。suffix被用来指定非活动目录环境中的DN的剩余部分。

在第二种模式中(我们将称之为搜索与绑定模式),服务器首先用一个固定的用户名和密码(用ldapbinddn和ldapbindpasswd指定)绑定到 LDAP 目录 ,并为试图登入该数据库的用户执行一次搜索。如果没有配置用户名和密码, 将尝试一次匿名绑定到目录。搜索将在位于ldapbasedn的子树上被执行,并将尝试做一次ldapsearchattribute中指定属性的精确匹配。一旦在这次搜索中找到用户,服务器断开并且作为这个用户重新绑定到目录,使用由客户端指定的口令来验证登录是正确的。这种模式与在其他软件中的 LDAP 认证所使用的相同,例如 Apache mod_authnz_ldappam_ldap。这种方法允许位于目录中用户对象的更大灵活性,但是会导致建立两个到 LDAP 服务器的独立连接。下列配置选项被用于两种模式:

ldapserver 要连接的LDAP服务器的名称或IP地址。可以指定多个服务器,用空格分隔。

ldapport 要连接的LDAP服务器的端口号。如果没有指定端口,LDAP库的默认端口设置将被使用。

ldapscheme 设置为ldaps可以使用LDAPS。这是一种非标准的在SSL之上使用LDAP的方法,在有一些LDAP服务器实现上可以支持。其他选择还可以参考ldaptls选项。

ldaptls 设置为1以使PostgreSQL和LDAP服务器之间的连接使用TLS加密。这会按照RFC 4513使用StartTLS操作。其他选择还可以参考ldapscheme选项。 注意使用ldapscheme或ldaptls仅会加密PostgreSQL服务器和LDAP服务器之间的通信。PostgreSQL服务器和PostgreSQL客户端之间的连接仍是未加密的,除非也在其上使用SSL。

下列选项只被用于简单绑定模式:

ldapprefix 当做简单绑定认证时,前置到用户名形成要用于绑定的DN的字符串。

ldapsuffix 当做简单绑定认证时,前置到用户名形成要用于绑定的DN的字符串。下列选项只被用于搜索与绑定模式: ldapbasedn 当做搜索与绑定认证时,开始搜索用户的根DN。

ldapbinddn 当做搜索与绑定认证时,用户要绑定到目录开始执行搜索的DN。

ldapbindpasswd 当做搜索与绑定认证时,用户用于绑定到目录开始执行搜索的口令。

ldapsearchattribute 当做搜索与绑定认证时,在搜索中用来与用户名匹配的属性。如果没有指定属性,将会使用uid属性。

ldapsearchfilter 在做search+bind认证时使用的搜索过滤器。$username的出现将被替换为用户名。这允许比ldapsearchattribute更加灵活的搜索过滤器。

ldapurl 一个RFC 4516 LDAP URL。这是一种用更紧凑和标准的形式书写某些其他LDAP选项的可选方法。格式是ldap[s]://host[:port]/basedn[?[attribute][?[scope][?[filter]]]] scope必须是base、one、sub之一,通常是最后一个(默认是base,但它在这个应用中通常没啥用)。attribute可以指定一个属性,在这种情况中它被用 作ldapsearchattribute的一个值。如果attribute为空,那么filter可以被用作ldapsearchfilter的一个值。 URL模式ldaps选择LDAPS方法来在SSL上建立LDAP连接,等效于使用ldapscheme=ldaps。 要使用StartTLS操作加密LDAP连接,可以用普通的URL模式ldap并且在ldapurl之外指 定ldaptls选项。 对于非匿名绑定,ldapbinddn和ldapbindpasswd必须被指定为独立选项。LDAP URL 当前只支持 OpenLDAP,而不支持 Windows。

将简单绑定的选项中混合用于搜索与绑定的选项是一种错误。在使用search+bind模式时,可以用ldapsearchattribute指定的单个属性执行搜索,或者使用ldapsearchfilter指定的自定义搜索过滤器执行搜索。指定ldapsearchattribute=foo等效于指定ldapsearchfilter="(foo=$username)"。如果两个选项都没有被指定,则默认为ldapsearchattribute=uid。

这里是一个简单绑定 LDAP 配置的例子:

代码语言:javascript
复制
host ... ldap ldapserver=ldap.example.net ldapprefix="cn=" ldapsuffix=", dc=example, dc=net"

当请求一个作为数据库用户someuser到数据库服务器的连接时,PostgreSQL 将尝试使用cn=someuser, dc=example, dc=net和客户端提供的口令来绑定到 LDAP 服务器。如果那个连接成功,将被授予数据库访问。

这里是一个搜索与绑定配置的例子:

代码语言:javascript
复制
host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchattribute=uid

当请求一个作为数据库用户someuser到数据库服务器的连接时,PostgreSQL 将尝试匿名绑定(因为没有指定ldapbinddn)到 LDAP 服务器,在指定的基础DN 下执行一次对于(uid=someuser)的搜索。如果找到一个项,则它将尝试使用找到的信息和客户端提供的口令进行绑定。如果第二个连接成功,将被授予数据库访问。

这里是被写成一个 URL 的相同搜索与绑定配置:

代码语言:javascript
复制
host ... ldap ldapurl="ldap://ldap.example.net/dc=example,dc=net?uid?sub"

一些支持根据 LDAP 认证的其他软件使用相同的 URL 格式,因此很容易共享该配置。这里是一个search+bind配置的例子,它使用ldapsearchfilter而不是ldapsearchattribute来允许用用户ID或电子邮件地址进行认证:

代码语言:javascript
复制
host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net"
 ldapsearchfilter="(|(uid=$username)(mail=$username))"

如例子中所示,由于 LDAP 通常使用逗号和空格来分割一个 DN 的不同部分,在配置 LDAP 选项时通常有必要使用双引号包围的参数值。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 20.10. LDAP 认证
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档