我已将用户更改为只能访问两个表空间
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';
......它什么都不返回。
这种行为的解释是什么?
答案 0 :(得分:2)
表空间与权限没有任何关系。用户有权访问的对象集与这些对象所在的表空间无关。表空间只是逻辑分区存储的一种方式。
all_objects
显示当前用户有权访问的所有对象。这是用户拥有的对象集以及用户通过GRANT
语句被授予访问权限的任何对象。根据您的说法,TEMP_USER
已被授予THE_OTHER_TEMP_USER
所拥有的许多对象(直接或通过角色)的访问权限,而THE_OTHER_TEMP_USER
未被授予对任何{{1}的访问权限对象。
当然,您可以发布TEMP_USER
语句,这些语句会撤消REVOKE
访问TEMP_USER
所拥有的各种对象的能力。