You need to enable JavaScript to run this app. Oracle 19环境下新建PDB用户并授权后连接报ORA-01017错误问题
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 19环境下新建PDB用户并授权后连接报ORA-01017错误问题

Oracle 19c 新建用户连接报ORA-01017的核心故障原因

最高概率根因:连接目标与用户所属容器不匹配

  • 你在操作说明中明确提到,是用SYSTEM账号登录指定PDB后创建的teste用户,该用户的归属容器是你登录的PDB,并非Oracle实例的根容器CDB$ROOT。
  • 你在CMD中执行SET oracle_sid=orcl后直接运行sqlplus teste/teste,这种不带服务名的本地连接,默认会指向orcl实例下的根容器CDB$ROOT,根本没有路由到你创建用户的PDB中。
  • 根容器内不存在teste用户,因此必然返回ORA-01017: 用户名/密码无效; 登录被拒绝的报错,这是19c多租户架构下新建PDB用户连接失败的最高发问题。

快速验证方法

使用SYSTEM账号本地连接到根容器后,执行以下SQL确认用户所属位置:

SELECT username, common, con_id FROM dba_users WHERE username='TESTE';
  • 如果查询结果中con_id为1、common为YES,说明用户确实建在根容器,需要继续排查其他配置问题
  • 如果查询无结果,说明用户仅存在于你之前登录的PDB中,完全可以确认是连接路由错误导致的问题
  • 你也可以切换回之前创建用户的PDB,查询用户状态:
    SELECT username, account_status FROM dba_users WHERE username='TESTE';
    
    确认用户是否处于未锁定的正常状态(如果建用户时未指定解锁配置,碰到默认profile的锁定策略可能出现LOCKED状态,同样会触发ORA-01017报错)。

正确的连接方式

本地连接时必须指定PDB的服务名,不能依赖默认的SID映射,格式参考:

sqlplus teste/teste@<主机地址>:1521/<PDB的服务名>

举例:如果你的PDB服务名为orclpdb,执行以下命令即可正常连接:

sqlplus teste/teste@localhost:1521/orclpdb

其他次要排查点

  • 不要在连接时省略服务名后反复输入用户名密码,这种操作全程都在往根容器发起连接,永远不会找到PDB内创建的用户。
  • 连接前确认目标PDB处于打开状态:用SYSTEM账号登录根容器执行SELECT name, open_mode FROM v$pdbs;,如果对应PDB为MOUNTED状态,执行ALTER PLUGGABLE DATABASE <PDB名称> OPEN;启动PDB,否则指定服务名也无法正常连接。
  • 你给自定义角色授予的create session权限属于角色权限,只要用户的默认角色配置正常,登录时会自动启用,不会因为角色未授权直接报ORA-01017(权限不足类的角色问题会触发ORA-01045报错,与当前报错无关)。
  • 19c默认开启密码大小写敏感校验,你创建用户时用的密码是小写teste,连接时输入小写密码即可匹配,无需强行输入大写密码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 07:15:10