Oracle 23ai用户C##TEST连接DBeaver/SQL Developer遇ORA-01045错误
解决Oracle 23ai中C##TEST用户第三方工具连接报ORA-01045的问题
问题场景
以SYSTEM用户登录SQL Plus完成以下操作:
- 创建用户
C##TEST - 授予
CONNECT、RESOURCE、CREATE SESSION权限 - 执行
d:\project\schema.sql脚本
但出现连接差异:
- SQL Plus执行
conn C##TEST/password可正常登录 - DBeaver或SQL Developer连接时,触发ORA-01045错误:
登录被拒绝,用户C##TEST无CREATE SESSION权限
可能原因及解决方案
1. 公共用户权限未覆盖目标容器
C##前缀的用户是Oracle CDB(容器数据库)中的公共用户,权限默认仅在当前授予的容器生效。若第三方工具连接的是PDB(可插拔数据库),而权限仅在CDB$ROOT中授予,就会出现权限缺失。
验证权限范围
执行以下SQL查看权限的容器覆盖情况:
SELECT grantee, privilege, common FROM dba_sys_privs WHERE grantee='C##TEST' AND privilege='CREATE SESSION';
若common列值为NO,说明权限仅在单个容器生效。
修复操作
- 授予全局生效的权限(覆盖所有容器):
GRANT CREATE SESSION TO C##TEST CONTAINER=ALL; GRANT CONNECT, RESOURCE TO C##TEST CONTAINER=ALL;
- 若仅需在特定PDB中使用,切换到目标PDB后单独授予:
ALTER SESSION SET CONTAINER=你的PDB名称; GRANT CREATE SESSION, CONNECT, RESOURCE TO C##TEST;
2. 第三方工具连接配置错误
检查工具的连接参数:
- 确认服务名配置正确:若要连接CDB,使用CDB的服务名;若连接PDB,使用对应PDB的服务名。
- 核对连接类型:部分工具默认优先连接PDB,需手动指定目标容器。
3. 排除其他登录限制
- 检查用户状态,确保未被锁定:
SELECT username, account_status FROM dba_users WHERE username='C##TEST';
- 检查用户关联的PROFILE是否有登录限制:
SELECT profile, limit FROM dba_profiles WHERE profile=(SELECT profile FROM dba_users WHERE username='C##TEST') AND resource_name='FAILED_LOGIN_ATTEMPTS';
若limit为0,需调整PROFILE规则或更换默认PROFILE。
内容的提问来源于stack exchange,提问作者user2312787




