CREATE USER ... IDENTIFIED GLOBALLY 生效需同时满足:启用EUS(enterprise_user_security=TRUE)、用户DN在目录中精确存在且已绑定数据库权限、数据库通过SSL信任链成功连接目录。缺一不可。
Oracle 中 CREATE USER ... IDENTIFIED GLOBALLY 的实际生效条件
这个语句本身不会自动创建企业目录用户,它只是告诉 oracle:“这个用户凭据不在本地密码文件里,而是在外部目录(比如 oid、oud 或 ad)中”。真正能登录的前提是:数据库必须已配置并启用企业用户安全(eus),且该全局用户已在目录中存在并映射到数据库的 schema。
- 没配 EUS(
enterprise_user_security = TRUE未启用或未注册到目录)→ 执行成功但无法登录,报错ORA-28030: Server failed to retrieve authentication information - 目录里根本没这个用户(如
CN=alice,OU=Users,DC=example,DC=com不存在)→ 登录时直接报ORA-28033: No enterprise user matched -
CREATE USER alice IDENTIFIED GLOBALLY AS 'CN=alice,OU=Users,DC=example,DC=com'中的 DN 必须与目录中完全一致,大小写和空格都敏感
配置 EUS 前必须确认的三个依赖项
EUS 不是开关一开就行,它依赖底层网络、证书和权限链路。漏掉任一环,IDENTIFIED GLOBALLY 用户就卡在认证环节。
- 数据库需用 SSL 连接目录服务器:检查
ldap.ora中SSL_SERVER_CERT_DIGEST是否匹配目录 CA 指纹,否则报ORA-21561: OID server not reachable - 数据库 wallet 必须包含信任的目录 CA 证书:用
orapki wallet add -wallet /path/to/wallet -trusted_cert -cert ca.crt导入,不能只放 client cert - 数据库用户需有
CREATE SESSION和ENTERPRISE USER ADMIN权限(后者通常由DBA角色隐含)
IDENTIFIED GLOBALLY 和 IDENTIFIED EXTERNALLY 别混用
两者都绕过本地密码校验,但认证机制和适用场景完全不同,强行替换会断掉已有集成。
-
IDENTIFIED EXTERNALLY依赖操作系统级认证(如 OS auth viaos_authent_prefix),适用于本地 Linux/Windows 用户直连,不走 LDAP -
IDENTIFIED GLOBALLY强制走 LDAP/OID 查询,要求 EUS 配置完整,且用户必须在目录中有对应条目 - 把一个
IDENTIFIED EXTERNALLY用户改成GLOBALLY→ 登录失败率 100%,因为目录里没有该用户的 DN 映射
验证全局用户是否真能用的最小检查清单
别只看 CREATE USER 是否执行成功,得模拟真实连接路径。
- 用
ldapsearch直连目录,确认 DN 存在且属性orclDBPrivilege包含目标数据库的 global_dbname(如orclDBPrivilege: orclDBName=PROD) - 用
sqlplus /@PROD测试 OS 认证是否干扰:如果能进,说明os_authent_prefix可能覆盖了全局认证,需显式指定用户名:sqlplus alice@PROD - 开启跟踪:
ALTER SYSTEM SET EVENTS '28030 trace name errorstack level 3';,再尝试登录,查 alert 日志里的具体 LDAP 错误码
最常被跳过的一步:目录服务器上该用户是否真的被授予了数据库访问权限(不是只建了账号)。EUS 要求用户条目里明确绑定数据库名和角色,光有 CN 没用。










