如何解决Oracle 12c以上版本的ORA-65096_C##公共用户前缀限制

张开发
2026/4/10 19:48:37 15 分钟阅读

分享文章

如何解决Oracle 12c以上版本的ORA-65096_C##公共用户前缀限制
ORA-65096错误源于Oracle 12c多租户架构下CDB$ROOT中创建用户时强制要求公共用户名以c##或C##开头且需显式指定CONTAINERALL若需普通用户应先切换至目标PDB再执行CREATE USER。ora-65096 错误本质是 oracle 强制要求公共用户在 cdb 环境下用户名必须以 c## 或 c## 开头不能绕过但可以合理适配。为什么创建用户时突然报 ORA-65096invalid common user or role nameOracle 12c 引入多租户CDB/PDB后CREATE USER 在 CDB$ROOT 中执行时默认按“公共用户”处理。只要没显式指定容器上下文且用户名不满足 c## 前缀规则就会触发该错误。这不是 bug是强制安全策略——防止跨 PDB 的用户命名冲突。常见错误现象在 SQL*Plus 或 SQL Developer 连到 CDB$ROOT 后直接运行 CREATE USER app_user IDENTIFIED BY pwd; → 立即报 ORA-65096误以为加了 CONTAINERALL 就能用任意名其实前缀检查仍生效试图用双引号包裹用户名如 app_user逃避校验 → 无效Oracle 会直接拒绝解析在 CDB$ROOT 中创建真正公共用户的正确写法如果确实需要跨所有 PDB 生效的用户比如运维监控账号必须接受前缀约束并显式控制作用域用户名必须以 c## 开头大小写敏感C## 也合法但建议统一小写必须加上 CONTAINER ALL否则默认仍是 CONTAINERCURRENT只在当前容器生效密码策略、表空间等参数与其他用户无异但默认无法直接登录 PDB需额外授权示例CREATE USER c##admin IDENTIFIED BY oracle123 CONTAINER ALL;注意CONTAINERALL 不代表自动赋予各 PDB 中的权限后续需在每个 PDB 中单独执行 GRANT CONNECT, RESOURCE TO c##admin;想在单个 PDB 里建普通用户先切容器绝大多数应用用户根本不需要跨 PDB此时 ORA-65096 的出现往往是因为连错了容器。解决方案不是改用户名而是切换上下文 Fotor AI Image Generator Fotor 平台的 AI 图片生成器

更多文章