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

Oracle APEX 21.1如何创建用户登录密码修改页面?

问题1:是否可通过APEX 21.1标准功能直接实现

分两种场景判断:

  • 如果你使用APEX默认的内置工作区用户认证(账号存储在APEX工作区用户库,而非自建业务表):完全不需要自定义开发。直接进入应用的「认证方案」配置页,找到「密码管理」板块,开启「允许最终用户修改密码」选项,APEX会自动提供密码修改入口,内置密码强度校验、旧密码验证、密码更新全流程逻辑,不需要手动建页面、写更新逻辑。
  • 如果你使用自定义用户表做认证(账号密码存储在自建业务表中,使用自定义认证校验逻辑):标准功能无法直接适配业务表,需要自定义开发改密页面。
问题2:自定义开发场景下的密码加密存储方案

核心原则:密码绝对不能明文存储,绝对不能使用可逆加密存储,必须使用带随机盐的强密码哈希算法。APEX 21.1已经提供官方封装的密码安全组件,不需要自行实现加密逻辑,具体实现步骤如下:

  • 调整用户表结构
    存储密码哈希的字段类型设置为VARCHAR2(200 CHAR)及以上长度,不要给该字段建模糊查询索引、不要配置大小写不敏感排序规则,仅做等值匹配使用。
  • 密码哈希处理
    不要自行实现MD5、SHA1、固定盐SHA256这类已被验证不安全的逻辑,直接调用APEX内置的、专门用于密码存储的APEX_UTIL.HASH_PASSWORD函数。该函数内部自动生成随机盐、使用抗暴力破解的慢哈希算法,返回值已经包含盐值和哈希结果,不需要额外单独存储盐值。
    页面提交后执行的更新逻辑参考如下PL/SQL代码:
    -- 先完成非空、密码强度规则校验,再执行更新
    UPDATE YOUR_CUSTOM_USER_TABLE
       SET USER_PASSWORD_HASH = APEX_UTIL.HASH_PASSWORD(p_password => :P9901_NEW_PASSWORD)
     WHERE USER_NAME = :APP_USER;
    
  • 配套安全校验
    • 改密页必须增加旧密码输入项,提交时先校验用户输入的旧密码和库中存储的哈希值是否匹配,校验通过才允许更新,防止会话被盗后直接篡改密码。校验旧密码可以直接用APEX_UTIL.IS_PASSWORD_VALID函数,传入用户输入的旧密码和库中存储的哈希值即可得到匹配结果。
    • 不要在代码里拼接明文密码,全程用绑定变量传值,避免SQL注入风险。
    • 密码更新成功后,可以调用APEX_AUTHENTICATION.LOGOUT强制用户重新登录,清除会话缓存。

注意:不要用DBMS_CRYPTO包的通用哈希函数存密码,这类函数为快速数据校验设计,哈希计算速度太快,暴力破解成本极低,不适合密码存储场景。

内容的提问来源于stack exchange,提问作者Mika Takaki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:33:08