多选题 要获取一个用户当前激活的所有角色的列表,应该查询以下哪个数据字典视图?
A.DBA_ROLES
B.SESSION_ROLES
C.DBA_ROLE_PRIVS
D.DBA_TAB_PRIVS

【正确答案】 B
【答案解析】[解析] 这一题是测试对与角色相关的数据字典的熟悉程度。因为要获取一个用户当前激活的所有角色的列表,所以可以猜测所需的数据字典应该带有ROLES,因此答案只可能是A或B。根据题目要求中的“一个用户当前激活的所有角色”,应该可以确定选项B是正确的。
实际上,在角色的创建的角色的修改的中已经使用过数据字典视图DBA_ROLES,仔细观察这两个例子的结果就可以确定在这个数据字典中并没有所需的信息,所以选项A可以排除。
另外,在角色回收和删除中已经使用过数据字典视图DBA_ROLE_PRIVS,仔细观察这个例子的结果就可以确定在这个数据字典中并没有所需的信息,所以选项C也可以排除。
可以启动SQL*Plus,通过一个普通用户如scott用户登录数据库,之后交替地查询数据字典SESSION_ROLES,并使用不同的set role命令,去观察set role命令执行前后查询结果的变化。通过这些操作之后,就可以非常自信地说只有选项B是正确的了,其操作的命令如下:
SQL>select * from SESSION_ROLES;
ROLE
------------
CONNECT
RESOURCE
FOX
SQL>SET ROLE ALL EXCEPT fox;
角色集
SQL>select * from SESSION_ROLES;
ROLE
------------
CONNECT
RESOURCE
SQL>set role connect;
角色集
SQL>select * from SESSION_ROLES;
ROLE
-------------
CONNECT
SQL>set role all;
角色集
SQL>select * from SESSION_ROLES;
ROLE
CONNECT
RESOURCE
FOX