我怎样才能阻止用户在 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.
已编辑:
- 使用适当的术语(将一些词从
tablespace
更改为 schema
)
- 在用户
上添加 session_privs 的 SELECT
结果
- 添加数据的来源方法。
这是我的错。我错过了我添加了一些 roles.
为了使用 Oracle SQL Developer 复制数据,我为用户添加了预定义角色。角色是 exp_full_database
和 imp_full_database
。
根据 Oracle Database Security Guide: Configuring Privilege and Role Authorization,exp_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
我正在使用 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.
已编辑:
- 使用适当的术语(将一些词从
tablespace
更改为schema
) - 在用户 上添加 session_privs 的
- 添加数据的来源方法。
SELECT
结果
这是我的错。我错过了我添加了一些 roles.
为了使用 Oracle SQL Developer 复制数据,我为用户添加了预定义角色。角色是 exp_full_database
和 imp_full_database
。
根据 Oracle Database Security Guide: Configuring Privilege and Role Authorization,exp_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