Sql create role语句导致ora-01031权限不足

Sql create role语句导致ora-01031权限不足,sql,oracle11g,roles,Sql,Oracle11g,Roles,我正在使用TOAD for Oracle并连接到11g数据库。我有一个用户拥有由角色关联指定的创建角色系统权限,但是当我运行该语句时: create role myNewRole; 我得到一个错误: ora-01031权限不足 我不明白这里有什么问题,因为我以前做过很多次,从来没有遇到过问题。我无法通过google或stack找到与CREATEROLE语句相关的任何类似问题 有人知道这里发生了什么吗?通过查看与用户的角色关联,问题得以解决。事实证明,它没有设置为默认角色,因此解决方案是以下两种

我正在使用TOAD for Oracle并连接到11g数据库。我有一个用户拥有由角色关联指定的创建角色系统权限,但是当我运行该语句时:

create role myNewRole;
我得到一个错误:

ora-01031权限不足

我不明白这里有什么问题,因为我以前做过很多次,从来没有遇到过问题。我无法通过google或stack找到与CREATEROLE语句相关的任何类似问题


有人知道这里发生了什么吗?

通过查看与用户的角色关联,问题得以解决。事实证明,它没有设置为默认角色,因此解决方案是以下两种之一:

  • 使用
    alter user default role将角色设置为默认角色
  • 使用
    Set role将角色设置为会话中的活动角色
当然,如果您的角色具有安全性,则您必须在
之后使用由
标识的

我对问题的理解是,Oracle可能存在这样的情况:您希望角色与用户关联,但默认情况下不希望它处于活动状态,因此必须在会话期间显式启用它以使用它,这是对数据库的额外保护。如果将角色设置为默认角色,则该角色在每次登录时都处于活动状态,因为该角色的权限预期会被更频繁地使用和/或不会对数据库产生很大影响(负面)


感谢您的评论@ChrisFarmer,因为当我意识到系统权限不在我的会话中时,它引导我找到了我想要的答案。

这解释了为什么我授予DBA角色的用户在尝试更改另一个用户的密码时收到了ORA-01031。在会议上,他需要确定角色

当该用户从
SESSION\u PRIVS
中选择时,是否看到
create role