新建用户默认无法登录,是因为 Oracle 不自动授予 CREATE SESSION 权限,该权限必须由管理员在目标容器中显式授予,且需确认大小写、角色冲突及图形工具未保存等细节。

新建用户默认无法登录,是因为 Oracle 不自动授予 CREATE SESSION 权限 —— 这个权限必须由管理员显式赋予,否则连密码正确、账户未锁,照样被拒。
CREATE SESSION 不是默认权限,也不是角色附带的“隐含能力”
Oracle 的权限模型里,CREATE SESSION 是最基础的系统权限,但它不随用户创建而自动发放。哪怕你用 CREATE USER abc IDENTIFIED BY pwd; 成功建好用户,该用户也只是一个“空壳”,没有会话资格。
常见误解是以为 CONNECT 角色能兜底,但要注意:
- Oracle 12c 及以后版本中,
CONNECT角色确实只含CREATE SESSION,看起来够用 - 但如果该用户曾被显式执行过
REVOKE CREATE SESSION FROM abc;,哪怕CONNECT已授予,登录仍失败 —— “显式拒绝”优先级高于角色授予 - 旧版(如 10g)的
CONNECT还带CREATE TABLE等权限,但新环境已剥离,不能依赖它“顺带给登录权”
多租户(CDB/PDB)环境下权限作用域极易错
在 Oracle 19c 多租户架构中,CREATE SESSION 权限必须在目标 PDB 内授予。在 CDB$ROOT 中授了,对连接 PDB 的用户完全无效。
操作前务必确认当前容器:
- 执行
SHOW CON_NAME;查看当前容器名 - 如果要授权给连接
PDBORCL的用户,先切过去:ALTER SESSION SET CONTAINER = PDBORCL; - 再执行
GRANT CREATE SESSION TO abc; - 验证时也要在同一个 PDB 下查:
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'ABC' AND PRIVILEGE = 'CREATE SESSION';
图形界面操作常因漏点“Apply”导致权限没生效
PL/SQL Developer、Navicat 等工具 UI 上勾选了 CREATE SESSION,但只点 OK 或 Close 不保存 —— 权限根本没写入数据库,这是高频疏忽。
具体步骤需盯紧“保存动作”:
- PL/SQL Developer:右键用户 → Edit User → System Privileges 标签页 → 勾选
CREATE SESSION→ 点OK后,**必须再点Apply或Save**(按钮名依版本略有差异) - Navicat for Oracle:用户 → 编辑用户 → 服务器权限 选项卡 → 勾选
CREATE SESSION→ 点击保存 - 操作后别信 UI 显示,一定要用 SQL 查
DBA_SYS_PRIVS确认
最容易被忽略的是大小写敏感和容器上下文:用户名若用双引号创建(如 "Abc"),授权时也得写成 "Abc";而 CDB 和 PDB 的权限表互不可见,跨容器查不到不是 bug,是设计如此。











