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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:09:01