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
相关产品推荐
相关产品推荐

