Oracle 11g中的角色授权是否已更改?

时间:2010-02-17 15:45:18

标签: oracle oracle11g roles grant ora-01045

我尝试通过角色向用户授予CONNECT

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 登录则被拒绝:

ORA-01045: user MY_USER lacks CREATE SESSION privilege; logon denied

向角色授予CREATE SESSION没有任何区别 我只能在直接向用户授予CONNECT(或CREATE SESSION)后登录。

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

3 个答案:

答案 0 :(得分:6)

我认为你可能已经获得了10g的安全“功能”。我阅读11g SQL参考和安全指南的方式表明,在该角色授予的任何权限生效之前,启用密码的角色需要使用SET ROLE my_role IDENTIFIED BY passwd

在您拥有该角色之前,您不能CREATE SESSION,在发布SET ROLE之前,您无法拥有该角色。

捕捉-22。

答案 1 :(得分:2)

Oracle知识库[ID 745407.1]解释了这一点。

中的DEFAULT子句

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

  1. 未授予用户的角色

  2. 通过其他角色授予的角色

  3. 由外部服务(例如操作系统)或Oracle Internet Directory管理的角色

  4. 经过密码验证的角色。

  5. 作为安全应用程序角色实现的角色。

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

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

    选择'改变角色'||角色||'没有确定;'来自dba_roles,其中password_required ='YES'且角色不在(从dba_application_roles中选择角色);

答案 2 :(得分:1)

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

据我们所知,这没有记录。但是当我们的系统从10.2.0.4升级到10.2.0.5时,这个改变打破了我们的几个系统,我们不得不为我们的功能帐户创建并行的非保护角色,这些角色没有任何激活默认角色的机制。我们基本上创建了old_role_batch而没有密码,因为old_role whish的副本受密码保护。