为什么用户可以从其他表空间访问对象?

时间:2014-09-24 22:14:17

标签: oracle oracle11g

我已将用户更改为只能访问两个表空间

alter user TEMP_USER quota unlimited on TEMP_USER_DAT;
alter user TEMP_USER quota unlimited on TEMP_USER_IDX;

所以当我查找用户表空间时,它只返回上面两个表空间:

select default_tablespace from user_users;

但是,当我以此用户身份登录并检查对象的所有者时:

SELECT owner, object_name, object_type FROM all_objects 
where owner = 'THE_OTHER_TEMP_USER';

它返回属于THE_OTHER_TEMP_USER的所有表,所有这些表都来自一个非常不同的表空间!!

然而,当我以THE_OTHER_TEMP_USER身份登录并再次运行上述命令但条件不同时......

SELECT owner, object_name, object_type FROM all_objects 
where owner = 'TEMP_USER';

......它什么都不返回。

这种行为的解释是什么?

1 个答案:

答案 0 :(得分:2)

表空间与权限没有任何关系。用户有权访问的对象集与这些对象所在的表空间无关。表空间只是逻辑分区存储的一种方式。

all_objects显示当前用户有权访问的所有对象。这是用户拥有的对象集以及用户通过GRANT语句被授予访问权限的任何对象。根据您的说法,TEMP_USER已被授予THE_OTHER_TEMP_USER所拥有的许多对象(直接或通过角色)的访问权限,而THE_OTHER_TEMP_USER未被授予对任何{{1}的访问权限对象。

当然,您可以发布TEMP_USER语句,这些语句会撤消REVOKE访问TEMP_USER所拥有的各种对象的能力。