Oracle 11g中按角色更改的授权?

Oracle 11g中按角色更改的授权?,oracle,oracle11g,roles,grant,ora-01045,Oracle,Oracle11g,Roles,Grant,Ora 01045,我试图通过角色向用户授予连接: CREATE ROLE my_role IDENTIFIED BY "passwd"; GRANT CONNECT TO my_role; CREATE USER my_user IDENTIFIED BY "passwd"; GRANT my_role TO my_user; 当我在10g中尝试此功能时,效果良好,而在11g中,登录被拒绝: 用户MY_用户缺少创建会话权限;拒绝登录 向角色授予CREATE SESSION不会产生任何影响。 我只能在直接向用户

我试图通过角色向用户授予连接:

CREATE ROLE my_role IDENTIFIED BY "passwd";
GRANT CONNECT TO my_role;

CREATE USER my_user IDENTIFIED BY "passwd";
GRANT my_role TO my_user;
当我在10g中尝试此功能时,效果良好,而在11g中,登录被拒绝:

用户MY_用户缺少创建会话权限;拒绝登录

向角色授予CREATE SESSION不会产生任何影响。 我只能在直接向用户授予连接或创建会话后登录


Oracle是否改变了这种行为,或者我做错了什么?

我认为您可能在10g中使用了安全功能。我阅读《11g的SQL参考和安全指南》的方式表明,启用密码的角色需要使用passwd标识的SET ROLE my_ROLE,该角色授予的任何权限才能生效

在拥有角色之前,您无法创建会话;在发布SET role之前,您无法拥有角色


第22条军规。

激活默认角色,该角色作为默认角色授予用户,并且在Oracle 10g版本10.2.0.5中至少对我们的副本进行了密码保护更改。在10.2.0.5版中,默认情况下,受密码保护的角色将不再被激活。必须使用适当的密码专门打开它


据我们所知,这并没有记录在案。但当我们的系统从10.2.0.4升级到10.2.0.5时,这一变化破坏了我们的几个系统,我们不得不为我们的功能帐户创建并行的非保护角色,而这些功能帐户没有任何机制来激活默认角色。我们基本上创建了没有密码的旧角色批处理,作为受密码保护的旧角色的副本。

Oracle知识库[ID 745407.1]对此进行了解释

合同中的违约条款:

改变用户默认角色; 指定登录时默认授予用户的角色。此子句只能包含通过GRANT语句直接授予用户的角色,或由具有CREATE ROLE权限的用户创建的角色。您不能使用默认角色子句来启用:

未授予用户的角色

通过其他角色授予的角色

由外部服务(如操作系统)或Oracle Internet目录管理的角色

通过密码验证的角色

实现为安全应用程序角色的角色

对于通过密码验证的角色,版本10.2.0.5和11.1.0.7中引入了此更改。 对于安全应用程序角色,Oracle版本10.2.0.4和11.1.0.7中引入了此更改 这些更改将应用于所有未来版本。上述限制将在将来的文档中介绍

通过运行以下脚本,可以轻松地将启用密码的角色转换为标准角色:


选择“更改角色”| |角色| |“未识别;”来自dba_角色,其中密码_required='YES',角色不在dba_应用程序_角色中选择角色

太好了,非常感谢!你有没有注明的链接?我没有指向tahiti.oracle.com文档的链接,因为它的可用性不可靠。创建角色和设置角色语法分别位于第15-59页和第19-60页的Oracle数据库SQL语言参考11g Release 2 E10592-04中。