在Oracle APEX中如何基于用户ID实现数据记录权限控制
操作步骤全指南
第一步:自动填充APP_USER字段(解决字段为空的问题)
- 给
TIMESHEET表的APP_USER字段设置默认值,执行以下SQL即可实现新增记录时自动写入当前登录的APEX用户名:
ALTER TABLE "TIMESHEET" MODIFY "APP_USER" DEFAULT SYS_CONTEXT('APEX$SESSION','APP_USER');
- 表单侧补充配置:进入
TIMESHEET对应的新增/编辑页面,找到APP_USER对应的表单项,设置为隐藏类型,开启「值保护」,避免用户手动修改该字段值。 - 若需要补全历史数据的
APP_USER值,手动执行UPDATE语句给现有记录匹配对应用户名即可。
第二步:配置应用角色
- 进入APEX应用后台,打开「共享组件」-「安全性」-「角色」
- 新建两个角色:
员工、经理,将现有用户分别分配到对应角色下。
第三步:配置行级数据隔离
3.1 报表侧过滤(列表页仅展示权限内数据)
所有查询TIMESHEET表的报表(交互式报表、经典报表),将原查询SQL修改为增加过滤条件:
SELECT ID, NO, CUSTOMER, DATE_, TIME, WORKING_HOUR, PIC, TOPIC, REMARK, APP_USER FROM TIMESHEET WHERE -- 经理角色可查看全部数据 APEX_AUTHORIZATION.IS_USER_IN_ROLE('经理') = 'Y' OR -- 普通员工仅查看自己提交的数据 APP_USER = :APP_USER
注::APP_USER是APEX内置变量,直接调用即可获取当前登录用户的用户名
3.2 表单侧权限校验(防止越权访问他人记录)
编辑页的行来源SQL也增加上述相同的WHERE条件,同时可以在页面的「预处理」阶段增加校验逻辑:如果当前用户既不是经理,当前记录的APP_USER也不等于登录用户名,直接抛出无权限错误,或跳转至提示页即可避免越权修改。
第四步:效果验证
分别用员工角色账号、经理角色账号登录测试:
- 员工账号登录后,仅能看到、编辑自己提交的记录
- 经理账号登录后,可以查看、编辑所有员工的记录
内容的提问来源于stack exchange,提问作者New User
相关产品推荐
相关产品推荐

