使用默认和临时表空间创建用户TEMP_USER后,我向用户授予以下内容
GRANT CONNECT TO TEMP_USER;
GRANT RESOURCE TO TEMP_USER;
GRANT CREATE ANY VIEW TO TEMP_USER;
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO TEMP_USER;
GRANT advisor to TEMP_USER;
GRANT administer sql tuning set to TEMP_USER;
GRANT CREATE MATERIALIZED VIEW to TEMP_USER;
然后执行
select * from session_privs;
我获得了当前用户的所有这些权限:
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER
CREATE ANY VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE MATERIALIZED VIEW
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
ADVISOR
ADMINISTER SQL TUNING SET
并且UNLIMITED TABLESPACE
是我希望此用户逃脱的,我知道我可以运行revoke来删除权限,我们如何从RESOURCE
中排除这样的权限,以便我的用户无法访问其他SCHEMA上同名的表格?
答案 0 :(得分:2)
未包含在RESOURCE
附带的特权列表the documentation中;并且它也没有在DBA_SYS_PRIVS
中列出。但它被授予RESOURCE
,无论如何都是11gR2。
文档还说:
注意: Oracle建议您为数据库安全设计自己的角色,而不是依赖此角色。未来的Oracle数据库版本可能不会自动创建此角色。
稍后会更有力地说明您不应该使用它,并且在将来的版本中会弃用它。
所以显而易见的答案是根本不使用RESOURCE
角色,而是直接授予你想要的权限:
GRANT CONNECT TO TEMP_USER;
-- GRANT RESOURCE TO TEMP_USER;
GRANT CREATE CLUSTER TO TEMP_USER
GRANT CREATE INDEXTYPE TO TEMP_USER
GRANT CREATE OPERATOR TO TEMP_USER
GRANT CREATE PROCEDURE TO TEMP_USER
GRANT CREATE SEQUENCE TO TEMP_USER
GRANT CREATE TABLE TO TEMP_USER
GRANT CREATE TRIGGER TO TEMP_USER
GRANT CREATE TYPE TO TEMP_USER
GRANT CREATE ANY VIEW TO TEMP_USER;
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO TEMP_USER;
GRANT advisor to TEMP_USER;
GRANT administer sql tuning set to TEMP_USER;
GRANT CREATE MATERIALIZED VIEW to TEMP_USER;
或者创建自己的角色,为其授予权限,并将角色授予用户 - 这更易于管理(但可能对存储的PL / SQL有影响;而不是您需要从PL /运行DDL SQL)。无论哪种方式,只授予用户真正需要的权限,这可能是来自RESOURCE
的权限的一部分。
但是,您说"因此我的用户无法在其他SCHEMA"上访问具有相同名称的表。那不是什么`无限的表格"它可以让您在任何表空间中创建对象而无需存储配额:
要允许用户在数据库中使用无限量的任何表空间,请为用户授予
UNLIMITED TABLESPACE
系统权限。这将覆盖用户的所有显式表空间配额。如果稍后撤消该权限,则必须明确授予单个表空间的配额。您只能将此权限授予用户,而不授予角色。
您可能仍然不希望您的用户拥有该权限,但它只会影响他们可以使用的存储,而不会影响他们在其他模式中可以访问的内容。
CREATE ANY VIEW
看起来有点不合适,因为它允许您在另一个模式中创建视图;也许你只想使用CREATE VIEW
。