当我尝试连接时,为什么Oracle认为我的用户没有"创建会话"权限?

Ste*_*rno 5 oracle roles

我在我的Oracle 11g数据库中创建了一个名为TestUserRole的角色,它最终会拥有更多权限,但目前只有Create Session权限.我已将该角色分配给用户TestUser.这是他们唯一的角色.

我创建如下:

CREATE ROLE TestUserRole IDENTIFIED BY somepassword;
GRANT Create Session TO TestUserRole;
CREATE USER TestUser IDENTIFIED BY somepassword;
GRANT TestUserRole TO TestUser;
Run Code Online (Sandbox Code Playgroud)

当我尝试连接到数据库时,我收到:

ORA-01045:用户TESTUSER缺少CREATE SESSION权限; 登录被拒绝

我已经验证(我认为)用户和角色已成功设置.如果我查询

select * from dba_role_privs where grantee = 'TESTUSER'
Run Code Online (Sandbox Code Playgroud)

我明白了

| Grantee  | Granted_Role | Admin_Option | Default_Role |
---------------------------------------------------------
| TESTUSER | TESTUSERROLE | NO           | YES          |
Run Code Online (Sandbox Code Playgroud)

然后如果我查询

select * from role_sys_privs where role = 'TESTUSERROLE'
Run Code Online (Sandbox Code Playgroud)

我明白了

| Role         | Privilege      | Admin_Option |
------------------------------------------------
| TESTUSERROLE | CREATE SESSION | NO           |
Run Code Online (Sandbox Code Playgroud)

因此,我似乎已成功创建用户和角色,用户具有角色,并且角色具有创建会话权限.然而,当我尝试登录时,Oracle告诉我用户没有创建会话权限.我哪里错了?我是否必须直接将此权限分配给用户而不是通过角色?

Mon*_*Kin 12

你可以尝试在没有"IDENTIFIED BY密码"条款的情况下创建你的角色吗?

这里说的如下:

BY password子句允许您创建本地角色,并指示用户在启用角色时必须为数据库指定密码.

然后问题是因为当登录角色尚未启用时,用户必须使用此处指定的"SET ROLE"语句启用它,但这只能在登录后完成.