0

我试图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)用户后才能登录。

甲骨文改变了这种行为还是我做错了什么?

4

3 回答 3

6

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

除非你有角色,否则你不能CREATE SESSION拥有角色,直到你发出SET ROLE.

第 22 条军规。

于 2010-02-17T16:30:40.773 回答
2

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

DEFAULT 子句中的:

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

  1. 未授予用户的角色

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

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

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

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

对于密码验证角色,已在版本 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 中选择角色);

于 2011-12-15T11:34:54.750 回答
1

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

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

于 2011-05-11T19:09:41.537 回答