在 Oracle APEX 日常开发中,笔者习惯使用 Object Browser 对不同 Schema 进行管理。最近为了测试同事开发的本体构建平台,笔者导入了 Oracle 自带的 SH 用户来模拟业务数据,却在分配 Schema 时遇到了一个"怪问题"。
01 | 问题现象:下拉列表里找不到 SH
在 APEX 管理后台,通过 Manage Workspaces -> Manage Workspace to Schema Assignments -> Add Schema 为工作区分配已存在的 Schema 时,候选下拉列表中竟然找不到 SH 用户。
明明 SH 是数据库里真实存在的用户,为何在 APEX 的分配界面中"隐身"了?这并非 APEX 的 Bug,而是其默认的安全机制在起作用。
02 | 原因与解法:注册 Schema 例外
APEX 出于安全考虑,默认只允许工作区访问部分受控 Schema。对于 SH 这类未在 APEX 中显式注册的用户,需要由管理员手动将其加入"例外名单"。
解决方案是使用 SYS 用户执行 APEX_INSTANCE_ADMIN.CREATE_SCHEMA_EXCEPTION 存储过程,将 SH 用户与目标工作区(例如 WS_ALFRED)进行绑定:
sql
SQL> show user
USER is "SYS"
SQL> BEGIN
2 APEX_INSTANCE_ADMIN.CREATE_SCHEMA_EXCEPTION(
3 p_schema => 'SH',
4 p_workspace => 'WS_ALFRED'
5 );
6 COMMIT;
7 END;
8* /
PL/SQL procedure successfully completed.
执行成功后,再次回到 Add Schema 页面,SH 用户就会出现在候选列表中,可以正常勾选并添加:

添加完成后,笔者就能在 Object Browser 中愉快地访问和管理 SH 下的业务数据了:

小结
当 APEX 默认无法为工作区分配某个数据库用户时,不必怀疑环境配置。通过 APEX_INSTANCE_ADMIN.CREATE_SCHEMA_EXCEPTION 存储过程将该 Schema 加入例外,即可快速解决问题。这一操作对管理员来说简单高效,但需注意它属于例外授权,应谨慎使用。
关注我,和AI一起成长~