【问题标题】:Why user can access object from other tablespace?为什么用户可以从其他表空间访问对象?
【发布时间】:2015-05-04 01:38:07
【问题描述】:

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

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';

...它什么也不返回。

这种行为的解释是什么?

【问题讨论】:

  • oracle 中的表空间不是访问控制结构。事实上,它不是一个逻辑结构,只是一个物理结构。因此,只要您授予了架构或表的权限,您就可以访问它,无论它位于哪个表空间中。

标签: oracle oracle11g


【解决方案1】:

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

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

当然,您可以发出 REVOKE 语句,以撤销 TEMP_USER 访问 THE_OTHER_TEMP_USER 拥有的各种对象的能力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    相关资源
    最近更新 更多