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

Oracle APEX 22.1密码管理问询:修改提示、加密等需求

Oracle APEX 22.1 登录系统优化方案

1. 实现密码修改提示功能

  • 新建密码修改页面:在应用中创建表单类型页面,数据源绑定CSD_LOGIN_USERS表,仅保留USER_ID(设为隐藏项,用于定位当前用户)、PASSWORD(输入类型设为密码),额外添加CONFIRM_PASSWORD(密码类型输入项)。
  • 添加触发入口:在用户主页或导航菜单新增「修改密码」按钮,点击跳转至密码修改页面。
  • 页面验证规则:
    • 添加相等验证,确保PASSWORD与CONFIRM_PASSWORD内容一致;
    • 可选添加密码复杂度验证(如长度≥8位、包含大小写字母+数字/特殊字符),可使用APEX内置的「正则表达式验证」或自定义PL/SQL验证。
  • 提交逻辑配置:页面提交时,调用加密函数(见下文)对新密码加密后更新至数据库,提交成功后显示「密码修改成功」提示并跳转回用户主页。

2. 取消登录时的强制密码修改提示

  • 排查登录触发逻辑:检查CSD_LOGIN_AUTH函数及登录页面的后置处理/分支规则,定位触发强制密码修改的代码(如判断PASSWORD_EXPIRED标记、首次登录标识等)。
  • 移除强制跳转:删除函数中触发强制修改的判断代码,或删除登录页面中指向密码修改页面的分支(分支条件为强制修改的规则)。
  • 保留主动触发路径:仅保留用户点击「修改密码」按钮时的跳转逻辑,确保无其他场景自动触发密码修改提示。

3. 对PASSWORD列的密码进行加密隐藏

3.1 实现密码哈希加密

使用APEX内置工具函数实现密码不可逆哈希(推荐SHA-256,无需解密,验证时比对哈希值):

-- 创建密码加密函数
CREATE OR REPLACE FUNCTION ENCRYPT_PASSWORD(p_password IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
  RETURN APEX_UTIL.GET_HASH(p_password, 'SHA256');
END;
/

3.2 批量加密现有明文密码

-- 更新现有用户的明文密码为哈希值
UPDATE CSD_LOGIN_USERS
SET PASSWORD = ENCRYPT_PASSWORD(PASSWORD);
COMMIT;

3.3 修改登录验证函数

修改CSD_LOGIN_AUTH函数中的密码比对逻辑,从明文比对改为哈希值比对:

-- 修改后的验证逻辑
SELECT 1
FROM CSD_LOGIN_USERS
WHERE USER_NAME = p_user_name
AND PASSWORD = ENCRYPT_PASSWORD(p_password);

3.4 隐藏管理员对密码列的访问权限

  • 创建用户视图,屏蔽密码列:
CREATE OR REPLACE VIEW V_CSD_LOGIN_USERS AS
SELECT USER_ID, USER_NAME, EMAIL, CREATE_DATE -- 仅保留需展示的字段
FROM CSD_LOGIN_USERS;
  • 调整权限:收回管理员对原表的直接访问权限,授予视图访问权限:
REVOKE SELECT ON CSD_LOGIN_USERS FROM ADMIN_ROLE;
GRANT SELECT ON V_CSD_LOGIN_USERS TO ADMIN_ROLE;

3.5 密码修改页面适配

在密码修改页面的提交过程中,调用ENCRYPT_PASSWORD函数对新密码加密后再写入数据库,避免明文存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:21:21