如何在APEX中配置用户仅拥有工作空间的只读查询权限?
解决APEX用户只读查询权限的方案
要实现让USER只能执行SELECT查询、无法修改数据或创建对象,得从数据库层面权限控制和APEX工作空间权限配置两方面入手,光靠启用/禁用SQL Workshop肯定不够,具体步骤如下:
一、先从数据库层面锁死核心权限
APEX的所有操作最终都依赖数据库用户的权限,这是最基础的控制环节:
- 用你的ADMIN账号登录SQL Workshop(或者SQL*Plus等数据库客户端)。
- 给USER授予目标模式下的只读权限:
-- 给整个模式下的所有表授权SELECT,替换YOUR_SCHEMA为你的实际模式名 GRANT SELECT ON YOUR_SCHEMA.* TO USER; -- 如果只需要特定表,改成具体表名,比如: -- GRANT SELECT ON YOUR_SCHEMA.EMPLOYEES, YOUR_SCHEMA.DEPARTMENTS TO USER; - 收回USER所有可能的修改和对象创建权限(如果之前误授予过的话):
-- 收回插入、更新、删除等DML权限 REVOKE INSERT, UPDATE, DELETE, MERGE ON YOUR_SCHEMA.* FROM USER; -- 收回创建表、包、存储过程等DDL权限 REVOKE CREATE TABLE, CREATE VIEW, CREATE PACKAGE, CREATE PROCEDURE, CREATE FUNCTION FROM USER; - 确保USER只保留最基础的登录权限:
-- 先收回可能的多余角色(比如RESOURCE) REVOKE RESOURCE FROM USER; -- 只授予登录权限 GRANT CREATE SESSION TO USER;
二、在APEX工作空间里限制操作范围
数据库权限锁死之后,还要在APEX里细化工作空间用户的操作权限,防止在SQL Workshop里执行非法操作:
- 以ADMIN身份登录APEX,进入工作空间管理 → 用户和组 → 用户,找到USER并点击编辑。
- 在「角色分配」区域,只给USER分配SQL Developer角色(别给Workspace Administrator或Developer,这俩权限太宽泛)。
- 接下来细化SQL Developer角色的权限:
- 进入工作空间管理 → 安全 → 权限集。
- 找到「SQL Developer」权限集,点击编辑。
- 在「SQL Workshop权限」部分,取消勾选这些选项:
- 创建表
- 创建视图
- 创建程序单元(包、存储过程等)
- 编辑数据(插入、更新、删除)
- 运行DDL语句
- 只保留「执行SELECT查询」「查看对象信息」这类只读相关的权限。
- 保存修改后的权限集。
三、验证效果
用USER账号登录APEX,进入SQL Workshop:
- 尝试执行
SELECT * FROM YOUR_SCHEMA.TABLE_NAME;,应该能正常返回数据。 - 尝试执行
INSERT INTO YOUR_SCHEMA.TABLE_NAME VALUES(...);或者CREATE TABLE TEST(ID NUMBER);,应该会直接提示权限不足,无法执行。
这样就能完全满足你的需求:USER可以编写并执行SELECT查询,但碰不了数据修改和对象创建的操作。
内容的提问来源于stack exchange,提问作者Ravi Shankar




