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';
- 若student角色设置了密码,先移除密码验证以支持自动启用:
重新使用user3账号连接数据库即可正常登录。
补充说明:若环境为非CDB架构的21c,跳过容器切换步骤直接执行角色、用户相关修改语句即可。
内容的提问来源于stack exchange,提问作者codeonym
相关产品推荐
相关产品推荐

