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

Oracle 21c授予角色权限后用户连接报ORA-01045错误咨询

问题根因

Scott用户创建角色提示权限不足

Oracle Database 21c默认启用多租户安全增强策略,若部署为CDB架构,给用户授予系统权限时若未指定CONTAINER=CURRENT,权限仅在CDB根容器生效,在业务PDB内不识别。即使scott用户被授予过CREATE ROLE权限,若授权操作是在CDB$ROOT容器执行、而scott是PDB下的本地用户,就会出现权限不足的报错。

user3连接触发ORA-01045错误

该错误和角色本身的权限配置、是否带ADMIN OPTION无关,核心原因是student角色未被设置为user3的默认启用角色:

  • 若创建student角色时使用了IDENTIFIED BY设置密码,该类密码验证角色默认不会在用户登录时自动激活
  • 若user3被配置过DEFAULT ROLE NONE,后续新授予的角色不会自动加入默认启用列表
    登录阶段仅默认启用的角色携带的权限会生效,未激活角色的CREATE SESSION权限无法被识别,因此触发无会话创建权限的报错。
解决方案
  • 修复Scott创建角色权限问题(若需要使用scott创建角色)
    先切换到scott用户所在的业务PDB容器,重新执行授权:

    -- 替换为实际的PDB名称
    ALTER SESSION SET CONTAINER = 你的业务PDB名;
    GRANT CREATE ROLE TO scott CONTAINER=CURRENT;
    
  • 修复user3登录报错问题
    使用system用户(或其他具备ALTER USER、ALTER ROLE权限的用户)执行以下操作:

    • 若student角色设置了密码,先移除密码验证以支持自动启用:
      ALTER ROLE student NOT IDENTIFIED;
      
    • 将student设置为user3的默认启用角色:
      ALTER USER user3 DEFAULT ROLE student;
      
    • 验证配置是否生效,执行查询确认返回结果中student对应DEFAULT_ROLE字段值为YES:
      SELECT granted_role, default_role FROM dba_role_privs WHERE grantee = 'USER3';
      
  • 重新使用user3账号连接数据库即可正常登录。

补充说明:若环境为非CDB架构的21c,跳过容器切换步骤直接执行角色、用户相关修改语句即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 21:27:38