Lightweight Directory Access Protocol (LDAP)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。 LDAP服务可视为一种特殊的数据库服务,就像文件系统的目录一样以树形结构组织数据信息,通常存储的信息不会被频繁修改,侧重于快速检索,提供统一的访问方法。由于这种特性,LDAP常被用于用户认证的场景中。 这种认证方法操作起来类似于password
,只不过它使用 LDAP作为密码验证方法。LDAP被用于验证用户名/口令。因此,在使用LDAP进行认证之前,用户必须已经存在于数据库中。
LDAP 认证可以在两种模式下操作。在第一种模式中(我们将称之为简单绑定模式),服务器将绑定到构造成``prefix`` ``username`` ``suffix``的可区分名称。通常,``prefix``参数被用于指定 cn=
或者一个活动目录环境中的``DOMAIN``\
。``suffix``被用来指定非活动目录环境中的DN的剩余部分。
在第二种模式中(我们将称之为搜索与绑定模式),服务器首先用一个固定的用户名和密码(用``ldapbinddn``和``ldapbindpasswd``指定)绑定到 LDAP 目录 ,并为试图登入该数据库的用户执行一次搜索。如果没有配置用户名和密码,将尝试一次匿名绑定到目录。搜索将在位于``ldapbasedn``的子树上被执行,并将尝试做一次``ldapsearchattribute``中指定属性的精确匹配。一旦在这次搜索中找到用户,服务器断开并且作为这个用户重新绑定到目录,使用由客户端指定的口令来验证登录是正确的。这种模式与在其他软件中的 LDAP 认证所使用的相同,例如 Apache mod_authnz_ldap
和 pam_ldap
。这种方法允许位于目录中用户对象的更大灵活性,但是会导致建立两个到 LDAP 服务器的独立连接。
下列配置选项被用于两种模式:
ldapserver
要连接的LDAP服务器的名称或IP地址。可以指定多个服务器,用空格分隔。
ldapport
要连接的LDAP服务器的端口号。如果没有指定端口,LDAP库的默认端口设置将被使用。
ldapscheme
设置为
ldaps
可以使用LDAPS。这是一种非标准的在SSL之上使用LDAP的方法,在有一些LDAP服务器实现上可以支持。其他选择还可以参考ldaptls
选项。
ldaptls
设置为1以使KingbaseES和LDAP服务器之间的连接使用TLS加密。这会按照RFC 4513使用
StartTLS
操作。其他选择还可以参考ldapscheme
选项。
注意使用ldapscheme
或ldaptls
仅会加密KingbaseES服务器和LDAP服务器之间的通信。KingbaseES服务器和KingbaseES客户端之间的连接仍是未加密的,除非也在其上使用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
。
如果KingbaseES是用OpenLDAP作为LDAP客户端库编译的,则ldapserver
设置可以省略。在这种情况下,主机名和端口列表通过RFC 2782 DNS SRV记录查找。 _ldap._tcp.DOMAIN
的名称被查出,当DOMAIN
被从ldapbasedn
中提取出来时。
例如,一个简单绑定 LDAP 配置的例子:
host ... ldap ldapserver=ldap.example.net ldapprefix="cn=" ldapsuffix=", dc=example, dc=net"
当请求一个作为数据库用户someuser
到数据库服务器的连接时,KingbaseES 将尝试使用cn=someuser, dc=example, dc=net
和客户端提供的口令来绑定到 LDAP 服务器。如果那个连接成功,将被授予数据库访问。
例如,一个搜索与绑定配置的例子:
host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchattribute=uid
当请求一个作为数据库用户someuser
到数据库服务器的连接时,KingbaseES 将尝试匿名绑定(因为没有指定ldapbinddn
)到 LDAP 服务器,在指定的基础 DN 下执行一次对于(uid=someuser)
的搜索。如果找到一个项,则它将尝试使用找到的信息和客户端提供的口令进行绑定。如果第二个连接成功,将被授予数据库访问。
例如,一个 URL 的相同搜索与绑定配置:
host ... ldap ldapurl="ldap://ldap.example.net/dc=example,dc=net?uid?sub"
一些支持根据 LDAP 认证的其他软件使用相同的 URL 格式,因此很容易共享该配置。
例如,一个search+bind配置的例子,它使用ldapsearchfilter
而不是ldapsearchattribute
来允许用用户ID或电子邮件地址进行认证:
host ... ldap ldapserver=ldap.example.net ldapbasedn="dc=example, dc=net" ldapsearchfilter="(|(uid=$username)(mail=$username))"
例如,一个search+bind配置的例子,它使用DNS SRV程序来查找域名example.net
的LDAP服务的主机名和端口:
host ... ldap ldapbasedn="dc=example,dc=net"
提示
如例子中所示,由于 LDAP 通常使用逗号和空格来分割一个 DN 的不同部分,在配置 LDAP选项时通常有必要使用双引号包围的参数值。
6.5.3.1. 安装
1. KingbaseES数据库安装 无特殊要求,常用方式安装即可。安装完后initdb初始化数据目录。
Openldap安装
本文示例使用openldap进行LDAP身份验证配置,项目官方只发布源代码,不对外发布安装包。
提示
项目官方网站为: OpenLDAP, Main Page。
可通过两种方式安装:
Yum 安装
直接通过yum 安装打包好的版本。安装需要root用户权限。
#yum -y install openldap openldap-clients openldap-servers
拷贝配置文件,并修改文件owner 为ldap ,ldap用户在安装时会自动创建。
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG # chown -R ldap /var/lib/ldap/DB_CONFIG
启动服务和查看服务状态验证安装是否成功
# systemctl start slapd # systemctl status slapd
如需配置ldap服务开机自动启动,可以执行:
# systemctl enable slapd
配置文件路径为: /etc/openldap 数据文件路径为: /var/lib/ldap
从源代码安装
如系统没有安装包,可选择从源码编译安装。
解压和编译源码包:
#tar xvf openldap-2.4.44.tgz #cd openldap-2.4.44 # ./configure # make depend # make
安装需要root用户:
# su root -c 'make install'
默认安装路径为/usr/local 默认配置文件路径为: /usr/local/etc/openldap 默认可执行文件路径为: /usr/local/bin 默认数据库文件路径为: /usr/local/var/openldap-data
6.5.3.2. 配置LDAP服务器
通过yum安装和从源代码安装的openldap配置方式不一样。分开说明两种方式安装后的配置方法。
6.5.3.2.1. Yum安装后的配置方式
Yum安装后的配置文件默认路径为:/etc/openldap 下 ,请勿用编辑器直接编辑slapd.d目录下文件。使用ldapadd ldapdelete ldapmodify工具来编辑。
修改管理员密码
运行命令将明文密码“123456”转换成密文,修改密码是配置文件要用密文。
#slappasswd -s 123456 {SSHA}+lWgh5egDLskOg0dPAx5YWTFDExQ8lE6
编辑配置文件changepwd.ldif,配置文件为导入数据使用,请勿将直接在/etc/openldap/slapd.d目录下编辑。文件内容如下:
dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}+lWgh5egDLskOg0dPAx5YWTFDExQ8lE6
使用ldappad命令将修改的密码导入:
#ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={0}config,cn=config"
导入常用schema
常用schema文件位于/etc/openldap/schema/目录下,使用ldapadd命令导入:
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=cosine,cn=schema,cn=config" # ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=nis,cn=schema,cn=config" # ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=inetorgperson,cn=schema,cn=config" # ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=collective,cn=schema,cn=config" # ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=corba,cn=schema,cn=config" # ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=duaconf,cn=schema,cn=config" # ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=dyngroup,cn=schema,cn=config" # ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=java,cn=schema,cn=config" # ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=misc,cn=schema,cn=config" # ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=openldap,cn=schema,cn=config" # ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=pmi,cn=schema,cn=config" # ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=ppolicy,cn=schema,cn=config"
自定义域名
域名(domain name)可视为ldap以树形组织数据信息时的一个分支或者类别。同一个domain name下的数据在以domain name为树根的树内。下文中域管理员密码延用之前生成的密码,如需修改请重新以slappasswd命令生成新的密码密文。 自定义域名为kingbase.com,管理员账号为domainadmin,域名和管理员账号可根据需要修改内容红色部分,域名仅是组织数据的一个形式,不一定与所在主机域名一样。 编辑域名配置文件changedomain.ldif,内容如下:
dn: olcDatabase={1}monitor,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=domainadmin,dc=kingbase,dc=com" read by * none dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=kingbase,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=domainadmin,dc=kingbase,dc=com dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootPW olcRootPW: {SSHA}+lWgh5egDLskOg0dPAx5YWTFDExQ8lE6 dn: olcDatabase={2}hdb,cn=config changetype: modify add: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=domainadmin,dc=kingbase,dc=com" write by anonymous auth by self write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=domainadmin,dc=kingbase,dc=com" write by * read
将配置文件数据导入:
# ldapmodify -Y EXTERNAL -H ldapi:/// -f changedomain.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={1}monitor,cn=config" modifying entry "olcDatabase={2}hdb,cn=config" modifying entry "olcDatabase={2}hdb,cn=config" modifying entry "olcDatabase={2}hdb,cn=config" modifying entry "olcDatabase={2}hdb,cn=config"
创建组织
创建名为kingbaseES的组织,并且根据数据库的角色分类,创建4类组织单元,DBA、SSO、SAO、USER。 编辑配置文件base.ldif,内容如下:
dn: dc=kingbase,dc=com objectClass: top objectClass: dcObject objectClass: organization o: kingbaseES dc: kingbase dn: cn=orgadmin,dc=kingbase,dc=com objectClass: organizationalRole cn: orgadmin description: Directory Manager dn: ou=DBA,dc=kingbase,dc=com objectClass: organizationalRole ou: DBA
导入数据,导入数据时需要输入domainadmin的密码,请参照1. 修改管理员密码处设置的密码。
# ldapadd -x -D cn=domainadmin,dc=kingbase,dc=com -W -f base.ldif Enter LDAP Password: adding new entry "dc=kingbase,dc=com" adding new entry "cn=orgadmin,dc=kingbase,dc=com" adding new entry "ou=DBA,dc=kingbase,dc=com"
5. 增加用户 LDAP内用户数据与KingbaES数据库内的用户是独立的。LDAP只负责对用户名和密码的验证,因此数据库内必须有相同名字的用户才能登录。
生成新用户todd的登录密码todd123 密文:
# slappasswd -s todd123 {SSHA}vqCJ1KnL1xddvu5JXHaAH8h33f72Vgga
编辑配置文件users.ldif ,内容如下:
dn: uid=todd,ou=DBA,dc=kingbase,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: todd sn: database userPassword: {SSHA}vqCJ1KnL1xddvu5JXHaAH8h33f72Vgga loginShell: /bin/bash uidNumber: 503 gidNumber: 500 homeDirectory: /home/todd
可在同一该文件内编辑多个用户,以空行分开多个用户的数据。
导入用户数据:
# ldapadd -x -D cn=domainadmin,dc=kingbase,dc=com -W -f user.ldif Enter LDAP Password: adding new entry "uid=todd,ou=DBA,dc=kingbase,dc=com"
6.5.3.2.2. 源码安装后的配置方式
slapd.conf 配置文件
# vim /usr/local/etc/openldap/ slapd.conf
增加所有schema,并修改域名 内容如下:
# # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/collective.schema include /usr/local/etc/openldap/schema/corba.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/duaconf.schema include /usr/local/etc/openldap/schema/dyngroup.schema include /usr/local/etc/openldap/schema/inetorgperson.schema include /usr/local/etc/openldap/schema/java.schema include /usr/local/etc/openldap/schema/misc.schema include /usr/local/etc/openldap/schema/nis.schema include /usr/local/etc/openldap/schema/openldap.schema include /usr/local/etc/openldap/schema/pmi.schema include /usr/local/etc/openldap/schema/ppolicy.schema # Define global ACLs to disable default read access. # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. #referral ldap://root.openldap.org pidfile /usr/local/var/run/slapd.pid argsfile /usr/local/var/run/slapd.args # Load dynamic backend modules: # modulepath /usr/local/libexec/openldap # moduleload back_mdb.la # moduleload back_ldap.la # Sample security restrictions # Require integrity protection (prevent hijacking) # Require 112-bit (3DES or better) encryption for updates # Require 63-bit encryption for simple bind # security ssf=1 update_ssf=112 simple_bind=64 # Sample access control policy: # Root DSE: allow anyone to read it # Subschema (sub)entry DSE: allow anyone to read it # Other DSEs: # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # Directives needed to implement policy: # access to dn.base="" by * read # access to dn.base="cn=Subschema" by * read # access to * # by self write # by users read # by anonymous auth # # if no access controls are present, the default policy # allows anyone and everyone to read anything but restricts # updates to rootdn. (e.g., "access to * by * read") # # rootdn can always read and write EVERYTHING! ####################################################################### # MDB database definitions ####################################################################### database mdb maxsize 1073741824 suffix "dc=kingbase,dc=com" rootdn "cn=Manager,dc=kingbase,dc=com" # Cleartext passwords, especially for the rootdn, should # be avoid. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. rootpw secret # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. directory /usr/local/var/openldap-data # Indices to maintain index objectClass eq
启动服务器
以前端模式启动,输出调试信息:
# /usr/local/libexec/slapd -d 256 60a6bd0e @(#) $OpenLDAP: slapd 2.4.44 (May 18 2021 09:47:03) $ todd@localhost.localdomain:/home/todd/LDAP/openldap-2.4.44/servers/slapd 60a6bd0e mdb_monitor_db_open: monitoring disabled; configure monitor database to enable 60a6bd0e slapd starting
可通过以下命令检查服务器是否正常启动:
# ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts # extended LDIF # # LDAPv3 # base <> with scope baseObject # filter: (objectclass=*) # requesting: namingContexts # # dn: namingContexts: dc=kingbase,dc=com # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
创建组织
编辑配置文件base.ldif,内容如下:
dn: dc=kingbase,dc=com objectClass: top objectClass: dcObject objectClass: organization o: kingbaseES dc: kingbase dn: cn=orgadmin,dc=kingbase,dc=com objectClass: organizationalRole cn: orgadmin description: Directory Manager dn: ou=DBA,dc=kingbase,dc=com objectClass: organizationalRole cn: DBA ou: DBA
导入数据,LDAP 密码为字符串 secret:
# /usr/local/bin/ldapadd -x -D "cn=Manager,dc=kingbase,dc=com" -W -f base.ldif Enter LDAP Password: adding new entry "dc=kingbase,dc=com" adding new entry "cn=orgadmin,dc=kingbase,dc=com" adding new entry "ou=DBA,dc=kingbase,dc=com"
创建用户
LDAP内用户数据与KingbaES数据库内的用户是独立的。LDAP只负责对用户名和密码的验证,因此数据库内必须有相同名字的用户才能登录。
生成新用户todd的登录密码todd123 密文:
# slappasswd -s todd123 {SSHA}OoPRlB2dPrJIzTygJgWJrkLnqFgg6Ibu
编辑配置文件users.ldif ,内容如下:
dn: uid=todd,ou=DBA,dc=kingbase,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: todd sn: database userPassword: {SSHA}OoPRlB2dPrJIzTygJgWJrkLnqFgg6Ibu loginShell: /bin/bash uidNumber: 503 gidNumber: 500 homeDirectory: /home/todd
可在同一该文件内编辑多个用户,以空行分开多个用户的数据。
导入用户数据:
# ldapadd -x -D cn=Manager,dc=kingbase,dc=com -W -f user.ldif Enter LDAP Password: adding new entry "uid=todd,ou=DBA,dc=kingbase,dc=com"
可验证导入kingbase.com域的数据
# ldapsearch -x -b 'dc=kingbase,dc=com' '(objectClass=*)' # extended LDIF # # LDAPv3 # basewith scope subtree # filter: (objectClass=*) # requesting: ALL # # kingbase.com dn: dc=kingbase,dc=com objectClass: top objectClass: dcObject objectClass: organization o: kingbaseES dc: kingbase # orgadmin, kingbase.com dn: cn=orgadmin,dc=kingbase,dc=com objectClass: organizationalRole cn: orgadmin description: Directory Manager # DBA, kingbase.com dn: ou=DBA,dc=kingbase,dc=com objectClass: organizationalRole cn: DBA ou: DBA # todd, DBA, kingbase.com dn: uid=todd,ou=DBA,dc=kingbase,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: todd sn: database userPassword:: e1NTSEF9T29QUmxCMmRQckpJelR5Z0pnV0pya0xucUZnZzZJYnU= loginShell: /bin/bash uidNumber: 503 gidNumber: 500 homeDirectory: /home/todd uid: todd # search result search: 2 result: 0 Success # numResponses: 5 # numEntries: 4
6.5.3.3. 配置KingbaseES
6.5.3.3.1. 配置参数
安装的KingbaseES V8R6数据库版本需选择打开—with-ldap编译选项,否则无法支持LDAP认证方式。
6.5.3.3.2. 配置LDAP认证方式
1. 编辑数据目录下的sys_hba.conf配置文件 增加使用ldap认证的项。例如,要从本地登录的todd用户使用位于192.168.45.157上的LDAP服务器认证。则增加一条认证项:
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all todd ldap ldapserver=192.168.45.157 ldapprefix="uid=" ldapsuffix=",ou=DBA,dc=kingbase,dc=com" local all all trust # IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256 host all all 0.0.0.0/0 scram-sha-256 # IPv6 local connections: host all all ::1/128 scram-sha-256 host all all ::0/0 scram-sha-256 # Allow replication connections from localhost, by a user with the # replication privilege. local replication all trust host replication all 127.0.0.1/32 scram-sha-256 host replication all ::1/128 scram-sha-256
6.5.3.3.3. 创建数据库用户
如数据库内已存在用户忽略此步骤。
haoqinghe=# create user todd with password '123456'; CREATE ROLE
注意
上述示例中,数据库内用户todd使用密码123456,而LDAP内的todd用户使用密码todd123。当使用LDAP认证时使用密码todd123来登录而不是123456。
使用ksql本地登录数据库,会匹配sys_hba.conf中使用LDAP认证的项,触发LDAP认证过程。
输入正确口令时,登录成功。例如,输入LDAP内的todd用户的正确口令todd123:
$ ksql -U todd -p 7777 用户 todd 的口令: 输入 "help" 来获取帮助信息. WARNING:License file will expire in 23 days.
todd=>
输入其他口令时登录失败,并提示LDAP authentication failed:
$ ksql -U todd -p 7777 用户 todd 的口令: ksql: 错误: 无法连接到服务器:FATAL: LDAP authentication failed for user "todd"
服务器拒绝连接
LDAP服务器监听在tcp的 389端口,如服务正常无法访问服务的情况,请检查防火墙设置。设置防火墙允许访问:
# firewall-cmd --add-service=ldap –permanent # firewall-cmd --reload
或者关闭防火墙
# systemctl stop firewalld
关闭SELinux
# setenforce 0
导入数据时报错
报错如下:
ldap_modify: Insufficient access (50)
可能是执行命令的用户权限不足,请尝试以root执行。
ldif配置文件错误
报错如下:
ldapmodify: wrong attributeType at line xxx
可能对应的空行只有空格字符,删掉空格。属性名和值之间以空格分开,每行头部和尾部无多余空格。
数据库版本不支持ldap
数据库无法启动,并且log日志有:
invalid authentication method "ldap": not supported by this build
信息时,表示当前版本的数据库不支持LDAP认证方式,请重新安装支持的版本。
5 objectClass问题
导入用户数据时提示:
additional info: objectClass: value #0 invalid per syntax
可能是因为导入的schema不全引起的,请按照导入schema的步骤全部导入。