最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何在Oracle 12c/19c中为指定PDB创建本地管理员?
时间:2026-07-15 19:53:00 编辑:袖梨 来源:一聚教程网
在Oracle 12c/19c中,必须在目标PDB容器内创建本地用户并显式授予最小必要权限,不可直接授PDB_DBA或DBA角色;需先切换容器(ALTER SESSION SET CONTAINER)或登录时指定服务名,再执行CREATE USER及GRANT操作。
在 oracle 12c/19c 中,给指定 pdb 创建本地管理员,**不能直接授 pdb_dba 或 dba 角色**——这两个角色在 pdb 内部根本不存在或不可见,强行执行会立刻报 ora-01917 或 ora-01919。正确做法是:在目标 pdb 容器内,创建本地用户,并手动授予一组最小必要权限。
必须先切到目标 PDB 容器再操作
用 sqlplus / as sysdba 登录默认进的是 CDB$ROOT,后续所有 CREATE USER、GRANT 都作用于根容器,生成的用户无法登录该 PDB。常见错误就是忘了这步,导致用户建在 CDB 里却想连 PDB。
- 确认当前容器:
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM DUAL;,结果必须是你的目标 PDB 名(如ORCLPDB) - 如果不在目标 PDB,执行:
ALTER SESSION SET CONTAINER = orclpdb; - 更稳妥的方式是登录时就指定服务名:
sqlplus sys@orclpdb AS SYSDBA,避免误切
创建本地用户并授基础权限
12c/19c 的 PDB 管理员必须是本地用户(不带 C## 前缀),且权限需显式组合。不要用 GRANT DBA TO u1 ——它在 PDB 中无效,且即使在 CDB$ROOT 授予也只对 CDB 生效。
- 创建用户(自动为 LOCAL):
CREATE USER pdb_admin IDENTIFIED BY strong_pwd; - 授予连接与基本对象操作权:
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE TO pdb_admin; - 若需管理其他用户:
GRANT CREATE USER, DROP USER, ALTER USER TO pdb_admin;(注意:DROP USER不带级联,删用户时仍需加CASCADE) - 配额控制代替
UNLIMITED TABLESPACE:ALTER USER pdb_admin QUOTA UNLIMITED ON users;
19c 中可选:创建时直接指定管理员并授角色
Oracle 19c 支持在 CREATE PLUGGABLE DATABASE 语句中为新 PDB 预置管理员,并通过 ROLES 子句直接赋予 DBA 角色——但这仅适用于新建 PDB 场景,且该 DBA 是 PDB 级别“模拟角色”,底层仍是上述权限集合的快捷封装。
- 示例:
CREATE PLUGGABLE DATABASE app_pdb ADMIN USER pdb_adm IDENTIFIED BY pwd ROLES=(DBA); - 该语句执行后,
pdb_adm用户已具备 PDB 内常规 DBA 权限,但依然不能跨 PDB 操作 - 不推荐在已有 PDB 中用此方式“补授”,因为
ROLES只在创建时生效,后续无法追加
最容易被忽略的一点:权限组合必须在目标 PDB 内完成,且用户必须是本地用户。任何试图复用 CDB 级角色、跳过容器切换、或在错误上下文(如 CDB$ROOT)执行授权的操作,都会让账号看似创建成功,实则无法登录或执行关键 DDL。
相关文章
- 王者荣耀世界零氪玩家如何生存 07-28
- 快手极速版怎么绑定手机号 07-28
- 明日方舟和轻松小熊联动活动内容一览 07-28
- 逆战未来黎明之光 逆战未来黎明之光玩法机制与新手入门指南 07-28
- 植物大战僵尸融合版毁灭土豆地雷介绍 07-28
- 逆战未来飓风之龙 逆战未来飓风之龙武器获取方法详解 07-28