You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle DB 18c:如何撤销用户访问其他用户模式的权限?

Oracle 18c用户跨Schema访问权限问题解决

我使用以下脚本在Oracle DB 18c(版本18.0.0.0.0)中创建数据库用户:

CREATE USER username IDENTIFIED BY username;
-- ROLES
GRANT "CONNECT" TO username WITH ADMIN OPTION;
ALTER USER username DEFAULT ROLE "CONNECT";
-- SYSTEM PRIVILEGES
GRANT DROP ANY TRIGGER TO username WITH ADMIN OPTION;
GRANT DROP ANY SEQUENCE TO username WITH ADMIN OPTION;
GRANT CREATE TRIGGER TO username WITH ADMIN OPTION;
GRANT ALTER ANY PROCEDURE TO username WITH ADMIN OPTION;
GRANT ADMINISTER DATABASE TRIGGER TO username WITH ADMIN OPTION;
GRANT CREATE ANY PROCEDURE TO username WITH ADMIN OPTION;
GRANT EXECUTE ANY INDEXTYPE TO username WITH ADMIN OPTION;
GRANT DEBUG CONNECT SESSION TO username WITH ADMIN OPTION;
GRANT ALTER SESSION TO username WITH ADMIN OPTION;
GRANT CREATE MATERIALIZED VIEW TO username WITH ADMIN OPTION;
GRANT MERGE ANY VIEW TO username WITH ADMIN OPTION;
GRANT CREATE ANY INDEX TO username WITH ADMIN OPTION;
GRANT ALTER ANY MATERIALIZED VIEW TO username WITH ADMIN OPTION;
GRANT CREATE INDEXTYPE TO username WITH ADMIN OPTION;
GRANT DEBUG ANY PROCEDURE TO username WITH ADMIN OPTION;
GRANT CREATE ANY SEQUENCE TO username WITH ADMIN OPTION;
GRANT CREATE VIEW TO username WITH ADMIN OPTION;
GRANT ALTER ANY TABLE TO username WITH ADMIN OPTION;
GRANT CREATE SESSION TO username WITH ADMIN OPTION;
GRANT SELECT ANY TABLE TO username WITH ADMIN OPTION;
GRANT DELETE ANY TABLE TO username WITH ADMIN OPTION;
GRANT ALTER ANY SEQUENCE TO username WITH ADMIN OPTION;
GRANT DROP ANY MATERIALIZED VIEW TO username WITH ADMIN OPTION;
GRANT CREATE TABLE TO username WITH ADMIN OPTION;
GRANT DROP ANY TABLE TO username WITH ADMIN OPTION;
GRANT SELECT ANY SEQUENCE TO username WITH ADMIN OPTION;
GRANT MANAGE TABLESPACE TO username WITH ADMIN OPTION;
GRANT CREATE TYPE TO username WITH ADMIN OPTION;
GRANT CREATE TABLESPACE TO username WITH ADMIN OPTION;
GRANT SELECT ANY TRANSACTION TO username WITH ADMIN OPTION;
GRANT LOCK ANY TABLE TO username WITH ADMIN OPTION;
GRANT DROP ANY TYPE TO username WITH ADMIN OPTION;
GRANT QUERY REWRITE TO username WITH ADMIN OPTION;
GRANT EXECUTE ANY PROCEDURE TO username WITH ADMIN OPTION;
GRANT CREATE SYNONYM TO username WITH ADMIN OPTION;
GRANT DEBUG CONNECT ANY TO username WITH ADMIN OPTION;
GRANT CREATE SEQUENCE TO username WITH ADMIN OPTION;
GRANT CREATE ANY INDEXTYPE TO username WITH ADMIN OPTION;
GRANT DROP ANY INDEX TO username WITH ADMIN OPTION;
GRANT UPDATE ANY TABLE TO username WITH ADMIN OPTION;
GRANT DROP ANY VIEW TO username WITH ADMIN OPTION;
GRANT ALTER TABLESPACE TO username WITH ADMIN OPTION;
GRANT ALTER ANY TRIGGER TO username WITH ADMIN OPTION;
GRANT CREATE ANY VIEW TO username WITH ADMIN OPTION;
GRANT IMPORT FULL DATABASE TO username WITH ADMIN OPTION;
GRANT READ ANY TABLE TO username WITH ADMIN OPTION;
GRANT INSERT ANY TABLE TO username WITH ADMIN OPTION;
GRANT CREATE ANY MATERIALIZED VIEW TO username WITH ADMIN OPTION;
GRANT ALTER ANY TYPE TO username WITH ADMIN OPTION;
GRANT DROP ANY PROCEDURE TO username WITH ADMIN OPTION;
GRANT DROP ANY INDEXTYPE TO username WITH ADMIN OPTION;
GRANT UNLIMITED TABLESPACE TO username WITH ADMIN OPTION;
GRANT CREATE ANY TRIGGER TO username WITH ADMIN OPTION;
GRANT CREATE ANY TABLE TO username WITH ADMIN OPTION;
GRANT CREATE ANY TYPE TO username WITH ADMIN OPTION;
GRANT CREATE PROCEDURE TO username WITH ADMIN OPTION;
GRANT ALTER DATABASE TO username WITH ADMIN OPTION;
GRANT DROP TABLESPACE TO username WITH ADMIN OPTION;

问题

这些用户可以通过Schema Browser浏览其他用户的模式,还能对其他Schema的表执行SELECT、UPDATE等操作。我尝试执行REVOKE select on SYS.ALL_USERS from PUBLIC但未生效,请问需要撤销哪些权限来解决该问题?

解决方案

核心原因

问题出在授予的大量带ANY后缀的系统权限,这类权限允许用户操作所有Schema下的对象,包括浏览、修改其他用户的数据和对象。

需要撤销的权限

1. 跨Schema数据操作权限

这些权限直接允许对任意Schema的表执行增删改查,必须撤销:

REVOKE SELECT ANY TABLE FROM username;
REVOKE UPDATE ANY TABLE FROM username;
REVOKE DELETE ANY TABLE FROM username;
REVOKE INSERT ANY TABLE FROM username;
REVOKE READ ANY TABLE FROM username;

2. 跨Schema对象访问权限

这些权限允许查看或操作任意Schema的序列、事务等对象:

REVOKE SELECT ANY SEQUENCE FROM username;
REVOKE SELECT ANY TRANSACTION FROM username;
REVOKE LOCK ANY TABLE FROM username;

3. 跨Schema对象管理权限

如果不需要让用户修改、创建或删除其他Schema的对象,需撤销以下权限:

REVOKE ALTER ANY TABLE FROM username;
REVOKE ALTER ANY SEQUENCE FROM username;
REVOKE ALTER ANY PROCEDURE FROM username;
REVOKE ALTER ANY TRIGGER FROM username;
REVOKE ALTER ANY MATERIALIZED VIEW FROM username;
REVOKE ALTER ANY TYPE FROM username;
REVOKE CREATE ANY TABLE FROM username;
REVOKE CREATE ANY SEQUENCE FROM username;
REVOKE CREATE ANY VIEW FROM username;
REVOKE CREATE ANY PROCEDURE FROM username;
REVOKE CREATE ANY TRIGGER FROM username;
REVOKE CREATE ANY MATERIALIZED VIEW FROM username;
REVOKE CREATE ANY INDEX FROM username;
REVOKE CREATE ANY INDEXTYPE FROM username;
REVOKE CREATE ANY TYPE FROM username;
REVOKE DROP ANY TABLE FROM username;
REVOKE DROP ANY SEQUENCE FROM username;
REVOKE DROP ANY VIEW FROM username;
REVOKE DROP ANY PROCEDURE FROM username;
REVOKE DROP ANY TRIGGER FROM username;
REVOKE DROP ANY MATERIALIZED VIEW FROM username;
REVOKE DROP ANY INDEX FROM username;
REVOKE DROP ANY INDEXTYPE FROM username;
REVOKE DROP ANY TYPE FROM username;
REVOKE EXECUTE ANY PROCEDURE FROM username;
REVOKE EXECUTE ANY INDEXTYPE FROM username;
REVOKE MERGE ANY VIEW FROM username;

4. 不必要的超级管理员权限

原脚本中还授予了远超普通业务用户需求的权限,如数据库级、表空间级操作权限,建议一并撤销:

REVOKE ALTER DATABASE FROM username;
REVOKE CREATE TABLESPACE FROM username;
REVOKE DROP TABLESPACE FROM username;
REVOKE MANAGE TABLESPACE FROM username;
REVOKE IMPORT FULL DATABASE FROM username;
REVOKE ADMINISTER DATABASE TRIGGER FROM username;

关于之前的尝试无效的说明

REVOKE select on SYS.ALL_USERS from PUBLIC无法解决问题,因为用户能看到其他Schema,主要是因为拥有SELECT ANY TABLE等权限,这些权限允许用户访问数据字典中的ALL_OBJECTS等视图,从而获取其他Schema的对象信息。撤销上述ANY类权限后,用户仅能看到自己Schema下的对象和PUBLIC对象。

内容的提问来源于stack exchange,提问作者user2829319

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 23:24:58