Part01-基础概念与理论知识
1.1 LDAP概念
风哥教程参考Oracle官方文档Security部分。LDAP(轻量级目录访问协议)是一种用于访问和维护分布式目录服务的协议。Oracle数据库可以与LDAP目录集成,实现集中式用户和密码管理。更多视频教程www.fgedu.net.cn
1.2 Oracle LDAP集成架构
Oracle LDAP集成架构包括:LDAP服务器(如Oracle Internet Directory、Microsoft Active Directory)、Oracle Net
Services、Oracle数据库和客户端。用户信息存储在LDAP目录中,数据库通过Oracle Net Services查询LDAP目录进行认证。
1.3 LDAP集成的优势
1. 集中式用户管理,简化维护;2. 统一的密码策略;3. 支持单点登录;4. 增强安全性,避免在数据库中存储密码;5. 便于用户生命周期管理。
Part02-生产环境规划与建议
2.1 LDAP服务器选择
生产环境常用的LDAP服务器:Oracle Internet Directory (OID)、Microsoft Active Directory
(AD)、OpenLDAP。根据现有IT基础设施选择合适的LDAP服务器。
2.2 网络规划
确保Oracle数据库服务器与LDAP服务器之间网络通信畅通,特别是LDAP端口(默认389/TCP用于非SSL连接,636/TCP用于SSL连接)。学习交流加群风哥微信: itpux-com
2.3 目录结构设计
设计LDAP目录结构,包括:组织单元(OU)、用户对象、组对象。建议按部门或应用创建组织单元,便于管理。
Part03-生产环境项目实施方案
3.1 配置LDAP服务器
以Microsoft Active Directory为例,创建数据库用户和组。
# 使用Active Directory用户和计算机工具,创建OU=OracleDB,DC=fgedu,DC=net,DC=cn
# 创建数据库用户组
# 创建名为OracleDBUsers的全局安全组
# 创建数据库用户
# 创建名为fgedu_user的用户,并添加到OracleDBUsers组
3.2 配置Oracle Net Services
配置Oracle Net Services以使用LDAP目录。
# vi $ORACLE_HOME/network/admin/ldap.ora
DIRECTORY_SERVERS = (ad.fgedu.net.cn:389)
DEFAULT_ADMIN_CONTEXT = “DC=fgedu,DC=net,DC=cn”
DIRECTORY_SERVER_TYPE = OID
3.3 配置sqlnet.ora文件
配置数据库以使用LDAP认证。
# vi $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = (BEQ, LDAP)
NAMES.DIRECTORY_PATH = (LDAP, TNSNAMES)
3.4 在LDAP中注册数据库服务
使用Net Manager或命令行工具将数据库服务注册到LDAP目录。
# 创建服务注册文件fgedudb.ldif
dn: cn=fgedudb,cn=OracleContext,DC=fgedu,DC=net,DC=cn
objectclass: top
objectclass: orclNetService
cn: fgedudb
orclNetDescString:
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db.fgedu.net.cn)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=fgedudb)))
# 执行ldapadd命令
$ ldapadd -h ad.fgedu.net.cn -p 389 -D “cn=Administrator,cn=Users,DC=fgedu,DC=net,DC=cn” -w password -f
fgedudb.ldif
adding new entry cn=fgedudb,cn=OracleContext,DC=fgedu,DC=net,DC=cn
adding new entry cn=fgedudb,cn=OracleContext,DC=fgedu,DC=net,DC=cn
3.5 配置数据库LDAP认证
在数据库中配置LDAP认证。
$ sqlplus / as sysdba
SQL> ALTER SYSTEM SET LDAP_DIRECTORY_ACCESS = ‘PASSWORD’ SCOPE = SPFILE;System altered.
SQL> ALTER SYSTEM SET LDAP_DIRECTORY_SERVERS = ‘ad.fgedu.net.cn:389’ SCOPE = SPFILE;System altered.
SQL> ALTER SYSTEM SET LDAP_DIRECTORY_BASEDN = ‘DC=fgedu,DC=net,DC=cn’ SCOPE = SPFILE;System altered.
SQL> SHUTDOWN IMMEDIATE;Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP;ORACLE instance started.
Total System Global Area 2147483648 bytes
Fixed Size 9136728 bytes
Variable Size 1610612736 bytes
Database Buffers 520093696 bytes
Redo Buffers 7639040 bytes
Database mounted.
Database opened.
3.6 创建数据库用户映射
在数据库中创建映射到LDAP用户的数据库用户。
SQL> CREATE USER “FGEDU\fgedu_user” IDENTIFIED EXTERNALLY;User created.
SQL> GRANT CONNECT, RESOURCE TO “FGEDU\fgedu_user”;Grant succeeded.
# 创建表空间和表
SQL> CREATE TABLESPACE fgedu_data DATAFILE ‘/oradata/fgedudb/fgedu_data01.dbf’ SIZE 10G AUTOEXTEND ON NEXT
1G;Tablespace created.
SQL> CREATE USER fgedu IDENTIFIED BY fgedu123 DEFAULT TABLESPACE fgedu_data;User created.
SQL> GRANT CONNECT, RESOURCE TO fgedu;Grant succeeded.
SQL> CREATE TABLE fgedu.emp (id NUMBER, name VARCHAR2(50), salary NUMBER);Table created.
SQL> INSERT INTO fgedu.emp VALUES (1, ‘风哥1号’, 5000);1 row created.
SQL> COMMIT;Commit complete.
Part04-生产案例与实战讲解
4.1 客户端配置
配置Oracle客户端以使用LDAP目录解析服务名。
# vi $ORACLE_HOME/network/admin/sqlnet.ora
NAMES.DIRECTORY_PATH = (LDAP, TNSNAMES)
# 配置客户端的ldap.ora文件
# vi $ORACLE_HOME/network/admin/ldap.ora
DIRECTORY_SERVERS = (ad.fgedu.net.cn:389)
DEFAULT_ADMIN_CONTEXT = “DC=fgedu,DC=net,DC=cn”
DIRECTORY_SERVER_TYPE = OID
4.2 使用LDAP认证登录数据库
使用LDAP用户登录Oracle数据库。
$ sqlplus “FGEDU\fgedu_user@fgedudb”
SQL*Plus: Release 19.0.0.0.0 – Production on Thu Mar 31 11:00:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Password for user FGEDU\fgedu_user:
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.3.0.0.0
SQL> SHOW USER;USER is “FGEDU\FGEDU_USER”
SQL> SELECT * FROM fgedu.emp;ID NAME SALARY
———- ————————————————– ———-
1 风哥1号 5000
SQL> INSERT INTO fgedu.emp VALUES (2, ‘风哥2号’, 6000);1 row created.
SQL> COMMIT;Commit complete.
4.3 使用LDAP服务名解析
验证客户端是否可以通过LDAP解析服务名。学习交流加群风哥QQ113257174
$ ldapsearch -h ad.fgedu.net.cn -p 389 -D “cn=Administrator,cn=Users,DC=fgedu,DC=net,DC=cn” -w password -b
“cn=OracleContext,DC=fgedu,DC=net,DC=cn” “cn=fgedudb” orclNetDescString
# extended LDIF
#
# LDAPv3
# base
# filter: cn=fgedudb
# requesting: orclNetDescString
#
# fgedudb, OracleContext, fgedu.net.cn
cn: fgedudb
orclNetDescString:
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db.fgedu.net.cn)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=fgedudb)))
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
# 使用tnsping验证服务名
$ tnsping fgedudb
TNS Ping Utility for Linux: Version 19.0.0.0.0 – Production on 31-MAR-2026 11:10:00
Copyright (c) 1997, 2019, Oracle. All rights reserved.
Used parameter files:
/oracle/app/oracle/product/19c/db_1/network/admin/sqlnet.ora
Used LDAP adapter to resolve the alias
Attempting to contact
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db.fgedu.net.cn)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=fgedudb)))
OK (0 msec)
4.4 配置LDAP组映射
配置LDAP组映射到数据库角色。
SQL> CREATE ROLE fgedu_db_role;Role created.
SQL> GRANT SELECT, INSERT, UPDATE, DELETE ON fgedu.emp TO fgedu_db_role;Grant succeeded.
# 创建外部角色映射
SQL> CREATE ROLE “FGEDU\OracleDBUsers” IDENTIFIED EXTERNALLY;Role created.
SQL> GRANT fgedu_db_role TO “FGEDU\OracleDBUsers”;Grant succeeded.
SQL> ALTER USER “FGEDU\fgedu_user” DEFAULT ROLE “FGEDU\OracleDBUsers”;User altered.
Part05-风哥经验总结与分享
1. LDAP集成实现了用户的集中管理,减少了数据库管理员的工作量。风哥提示:生产环境建议将所有数据库用户统一到LDAP目录管理,避免分散管理。
2. 使用SSL加密LDAP连接,保护认证信息的安全传输。
3. 定期备份LDAP目录,防止用户信息丢失。
4. 配置适当的LDAP连接超时时间,避免数据库连接延迟。更多学习教程公众号风哥教程itpux_com
5. 在大规模环境中,可以配置多个LDAP服务器实现负载均衡和高可用性。
6. 结合Oracle Enterprise Manager,可以实现LDAP用户的图形化管理。from oracle:www.itpux.com
