You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Oracle数据库中指定CONTAINER=CURRENT创建common user的相关问题

Oracle CDB中用CONTAINER=CURRENT创建Common User的那些事儿

执行指定语句的结果

先直接说结论:CREATE USER c##comm_user IDENTIFIED BY comm_pwd CONTAINER = CURRENT;创建的还是Common User——因为它符合Common User的硬性命名要求:必须以C##或c##开头。

但和用CONTAINER=ALL创建的区别是,这个用户只会出现在你当前操作的容器里:

  • 如果你现在在CDB根容器(CDB$ROOT)执行这条语句,那这个用户只存在于根容器,不会自动跑到所有PDB里;
  • 如果你在某个应用根容器(Application Root)执行,那它就只在这个应用根里,不会同步到下属的应用PDB。

CONTAINER=CURRENT和ALL的核心区别

在CDB根容器(CDB$ROOT)操作时

  • CONTAINER=ALL:创建的Common User会自动在根容器+所有已存在的PDB里生成,之后新建的PDB也会自动带上这个用户(除非特意配置排除)。
  • CONTAINER=CURRENT:只在根容器创建用户,PDB里没有这个用户的映射。如果要让这个用户访问某个PDB,得手动到目标PDB里执行ALTER USER c##comm_user CONTAINER=CURRENT来启用,或者手动在PDB里创建该用户(本质是关联到根容器的同一个Common User)。

在应用容器(Application Root)操作时

  • CONTAINER=ALL:用户会自动在应用根+该应用根下所有已有的应用PDB里创建,后续新建的应用PDB也会默认包含这个用户。
  • CONTAINER=CURRENT:仅在当前应用根创建用户,下属应用PDB里没有。要让用户访问应用PDB,同样得手动到目标应用PDB里做启用操作。

额外提醒

  • 哪怕用CURRENT创建,这个用户的核心元数据还是存在根容器(CDB级)或应用根(应用容器级),本质还是Common User,只是没自动同步到下属容器而已。
  • 如果创建用户时没加C##/c##前缀,哪怕写了CONTAINER=ALL,也只能创建成Local User,成不了Common User。

内容的提问来源于stack exchange,提问作者oramas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:55:18