OpenLDAP匿名绑定已开启仍报err=53,Oracle tnsping解析失败求助
Oracle LDAP解析TNS条目报错TNS-03505排查解决
在Ubuntu LTS的树莓派4B上通过Docker部署OpenLDAP存储Oracle TNS条目,Oracle OEL 7.9虚拟机配置完ldap.ora和sqlnet.ora后,执行tnsping返回TNS-03505: 无法解析名称错误。OpenLDAP日志显示搜索操作返回err=53 text=authentication required,已尝试开放权限但问题依旧。
当前环境与配置
OpenLDAP权限配置
执行命令 ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "(olcAccess=*)" 返回结果:
olcAccess: {0}to * by * write
TNS条目LDAP数据
objectClass: top objectClass: orclNetService cn: P00CDB19 orclNetDescString: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.12)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=P00CDB19)))
OpenLDAP关键日志
67e4ce8c.20163760 0xffff7100f160 conn=1010 fd=14 ACCEPT from IP=192.168.1.9:54260 (IP=0.0.0.0:1389) 67e4ce8c.20bea59f 0xffff71a0f160 conn=1010 op=0 BIND dn="" method=128 67e4ce8c.20c73411 0xffff71a0f160 conn=1010 op=0 RESULT tag=97 err=0 qtime=0.000066 etime=0.000638 text= 67e4ce8c.20edca04 0xffff7100f160 conn=1010 op=1 SRCH base="cn=p00cdb19,cn=OracleContext,dc=<domain_name>,dc=<domain_name>" scope=0 deref=2 filter="(objectClass=*)" 67e4ce8c.20f3083c 0xffff7100f160 conn=1010 op=1 SRCH attr=objectclass orclNetDescString orclNetDescName orclVersion 67e4ce8c.20fb9529 0xffff7100f160 conn=1010 op=1 SEARCH RESULT tag=101 err=53 qtime=0.000076 etime=0.001111 nentries=0 text=authentication required 67e4ce8c.211d9bbb 0xffff71a0f160 conn=1010 op=2 UNBIND 67e4ce8c.2128aaf0 0xffff71a0f160 conn=1010 fd=14 closed
问题分析
从日志可明确:客户端(OEL7.9)以匿名绑定成功连接OpenLDAP,但搜索TNS条目时被拒绝,核心原因是匿名用户无对应分支的搜索权限。当前全局ACL配置看似开放,但存在以下可能的问题:
- ACL规则优先级:若存在其他未显示的ACL规则,可能覆盖了当前
to * by * write的全局规则 - 分支权限未明确:部分OpenLDAP版本默认限制匿名用户的分支搜索权限,需针对
OracleContext分支单独授权 - DN大小写匹配:搜索的base DN为小写
cn=p00cdb19,但LDAP条目为大写P00CDB19,部分配置下可能触发匹配失败
解决方案
1. 配置OracleContext分支的匿名访问权限
创建LDIF文件(例如acl_modify.ldif),添加针对OracleContext分支的匿名读权限:
dn: olcDatabase={1}mdb,cn=config changetype: modify add: olcAccess olcAccess: {1}to dn.subtree="cn=OracleContext,dc=<domain_name>,dc=<domain_name>" by anonymous read by * write
执行命令应用配置:
ldapmodify -Y EXTERNAL -H ldapi:/// -f acl_modify.ldif
2. 验证匿名搜索权限
在OEL7.9虚拟机上执行ldapsearch测试匿名访问:
ldapsearch -x -H ldap://<your-openldap-ip>:1389 -b "cn=P00CDB19,cn=OracleContext,dc=<domain_name>,dc=<domain_name>"
若能正常返回TNS条目信息,说明权限配置生效。
3. 修正Oracle客户端LDAP配置
在sqlnet.ora中添加强制匿名绑定的配置:
NAMES.DIRECTORY_PATH= (LDAP) NAMES.LDAP_AUTHENTICATE_BIND=OFF
同时确认ldap.ora中的base DN与LDAP条目保持一致(或利用LDAP大小写不敏感特性,统一为大写/小写)。
4. 检查OpenLDAP匿名绑定限制
执行命令检查是否禁用了匿名绑定:
ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" "(olcDisallows=*)"
若返回olcDisallows: bind_anon,需移除该限制:
dn: cn=config changetype: modify delete: olcDisallows olcDisallows: bind_anon
应用配置后重启OpenLDAP容器。
内容的提问来源于stack exchange,提问作者Sandeep Sandhu
相关产品推荐
相关产品推荐

