我怎样才能阻止用户在 Oracle 中的其他模式上查询 SELECT?

How could I prevent a user from querying SELECT on other schemas in Oracle?

我正在使用 Oracle 11g(11.2.0.1.0)。我创建了大约 20 table 个空间和用户。数据来自 [Tools] - [Database Copy] on Oracle SQL Developer.

不知何故,我发现用户正在使用来自另一个模式的 table 上的 SELECT 查询。为了安全起见,我想阻止它。我应该如何更改我的资助选项?

我看了"Oracle Database Security Guide 11g Release 2(11.2)",但没能清楚地找到答案。

这是我创建和授予的查询。

create user [USER_NAME]
identified by [PASSWORD]
default tablespace [TABLESPACE_NAME]
temporary tablespace TEMP;

grant create session,
      create database link,
      create materialized view,
      create procedure,
      create public synonym,
      create role,
      create sequence,
      create synonym,
      create table,
      drop any table,
      create trigger,
      create type,
      create view to [USER_NAME];

alter user [USER_NAME] quota unlimited on [TABLESPACE_NAME];

这是 session_privs 对用户的 SELECT 结果。

SQL> SELECT * FROM session_privs;

PRIVILEGE
--------------------------------------------------------------------------------
CREATE SESSION
CREATE TABLE
DROP ANY TABLE
CREATE SYNONYM
CREATE PUBLIC SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE DATABASE LINK
CREATE ROLE
CREATE PROCEDURE
CREATE TRIGGER

PRIVILEGE
--------------------------------------------------------------------------------
CREATE MATERIALIZED VIEW
CREATE TYPE

13 rows selected.

我想阻止用户查询 SELECT 其他模式。

例如下面的查询

-- connected with USER1
SELECT *
  FROM USER2.table1;

应该会出现如下错误:

ERROR: USER1 doesn't have SELECT privilege on USER2.

已编辑:

这是我的错。我错过了我添加了一些 roles.

为了使用 Oracle SQL Developer 复制数据,我为用户添加了预定义角色。角色是 exp_full_databaseimp_full_database

根据 Oracle Database Security Guide: Configuring Privilege and Role Authorizationexp_full_database 包含这些权限:

  • SELECT ANY TABLE
  • BACKUP ANY TABLE
  • EXECUTE ANY PROCEDURE
  • EXECUTE ANY TYPE
  • ADMINISTER RESOURCE MANAGER
  • INSERT, DELETE, UPDATE ON SYS.INCVID, SYS.INCFIL AND SYS.INCEXP

和角色:

  • EXECUTE_CATALOG_ROLE
  • SELECT_CATALOG_ROLE

现在不需要这些角色。所以答案是将它们从用户中移除。

REVOKE exp_full_database, imp_full_databsae FROM USER1;

我得到了我想要的结果。

-- connected with USER1
SELECT * FROM USER2.TABLE1;

ERROR at line 1:
ORA-01031: insufficient privileges