如何创建CDB公共用户_C##前缀强制规则与CONTAINER=ALL

C##前缀是Oracle 12c+中创建公共用户的强制校验逻辑,非可选建议;系统硬编码校验用户名是否匹配^C##.*(大小写敏感),不依赖参数或字典,且必须在CDBROOT中执行并显式指定CONTAINER=ALL。为什么 C## 前缀在 CDB 公共用户中不是"可选建议",而是强制校验逻辑oracle 12c+ 中创建公共用户(即跨 pdb 生效的用户)时,create user 语句若未以 c## 开头,会直接报错 ora-65096: invalid common user or role name。这不是配置开关或参数控制的结果,而是 oracle 内部对公共用户名称做的硬编码校验------它只检查前缀是否匹配正则 \^c##.\*(大小写敏感),不查字典、不读参数、不走策略。常见错误现象:执行 CREATE USER admin IDENTIFIED BY pwd CONTAINER=ALL; → 立刻报 ORA-65096用双引号包住: CREATE USER "c##admin" ... → 仍报错,因为校验发生在解析阶段,忽略引号在非 CDB 环境下执行相同语句 → 不报错,但该用户无法在 CDB 中被识别为公共用户CONTAINER=ALL 必须显式指定,且仅在特定会话上下文中有效即使用户名带 C##,漏写 CONTAINER=ALL 或写成 CONTAINER=CURRENT,创建的仍是本地用户(只存在于当前 PDB),不会同步到其他 PDB 或 ROOT。这个子句不是"默认开启"的选项。使用场景与限制:必须在 CDBROOT 中执行,不能在任意 PDB 中运行执行前需确认当前会话容器:SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM DUAL; 返回必须是 CDBROOTCONTAINER=ALL 不能和 DEFAULT TABLESPACE 指向某个 PDB 的表空间混用,否则报 ORA-65048: error encountered when processing the current DDL statement in pluggable database正确示例:CREATE USER c##monitor IDENTIFIED BY monitor123 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp CONTAINER=ALL;公共用户的权限授予必须同样加 CONTAINER=ALL,否则权限不跨容器给公共用户赋权时,如果用 GRANT SELECT_CATALOG_ROLE TO c##monitor; 而不加 CONTAINER=ALL,该权限只生效于当前容器(通常是 ROOT),PDB 中该用户依然无权查 V 视图等。 VWO 一个A/B测试工具

相关推荐
Cx330❀27 分钟前
【MySQL基础】一文吃透“表的约束”:从 Null/Default 到主外键的终极安全法则
linux·服务器·数据库·c++·mysql·安全
c2385643 分钟前
第二篇:《测试指挥官:可视化单题自测框架(含 assert 实操)》
java·数据库·c++·算法·安全性测试
我科绝伦(Huanhuan Zhou)1 小时前
MySQL极端场景数据丢失防护:从Crash-Safe到异地备份
数据库·mysql
辞旧 lekkk1 小时前
【Redis初阶】常见数据类型
开发语言·数据库·c++·redis·学习·缓存·bootstrap
明志数科2 小时前
人形机器人格斗场景下的技术挑战:动力学控制、感知融合与实时决策
网络·数据库
酉鬼女又兒2 小时前
零基础入门 DeepSeek V4 Pro API 开发:从环境搭建、消息格式规范到翻译函数实战、少样本提示、多轮对话聊天机器人与常见报错全流程详解指南
大数据·网络·数据库·人工智能·macos·机器人·github
笨蛋不要掉眼泪2 小时前
MySQL架构揭秘:MVCC解决读一致性问题
数据库·mysql·架构
Navicat中国2 小时前
开发者入门:无服务器数据库
数据库·云原生·serverless·navicat
梅雅达编程笔记3 小时前
编程启蒙|Scratch 转 Python 系列第9天:字典/哈希表积木双向对照(AI大模型参数配置表实战)
开发语言·人工智能·python·numpy·pandas
whn19774 小时前
如何避免以root用户执行达梦
数据库