Oracle APEX自定义登录认证提示无效凭证如何解决?
Oracle APEX 自定义登录报"Invalid Login Credentials"排查方案
第一步:校验MY_USERS表测试数据是否匹配查询条件
打开APEX的SQL Workshop,执行如下查询,将<测试用户名>、<测试密码>替换为你实际输入的登录信息:SELECT * FROM MY_USERS WHERE UPPER(username) = UPPER('<测试用户名>') AND password = '<测试密码>' AND status='Active';如果无数据返回,按以下顺序排查:
- 检查
status字段值是否为准确的Active,注意大小写、前后是否有多余空格 - 检查
password字段存储的值与输入内容是否完全一致,无大小写、字符差异 - 检查
username是否真实存在,无拼写错误
- 检查
第二步:修复认证函数的已知语法漏洞
你当前的认证函数存在明显的变量长度不匹配问题:定义的lc_pwd_exit是长度为1的字符串类型,但查询返回的'Active'长度为6,赋值时会触发值过长错误,最终导致认证失败。直接修改函数的变量定义即可:-- 将原来的 lc_pwd_exit VARCHAR2 (1); 修改为 lc_pwd_exit VARCHAR2 (10);修改完成后可以在SQL Workshop执行以下代码验证函数是否正常工作:
DECLARE v_res BOOLEAN; BEGIN v_res := user_aut('<测试用户名>', '<测试密码>'); DBMS_OUTPUT.PUT_LINE(CASE WHEN v_res THEN '认证通过' ELSE '认证不通过' END); END; /第三步:检查APEX认证方案配置
进入应用后台「共享组件」→「认证方案」,确认以下配置:- 你当前启用的是自定义认证方案,而非默认的APEX账户认证
- 认证函数名称填写正确,为
user_aut,无拼写错误 - 登录页的用户名、密码表单项名称与函数入参
P_USERNAME、P_PASSWORD映射正确
第四步:排查表权限问题
确认APEX应用的解析Schema拥有MY_USERS表的查询权限,如果表创建在其他Schema下,需要在查询语句中加上Schema前缀,或创建公共同义词,否则查询不到数据会直接返回认证失败。
额外优化建议:你当前的建表语句给
PASSWORD字段加了UNIQUE约束,会导致不同用户不能设置相同密码,不符合实际使用场景,建议后续去掉该约束;另外明文存储密码存在安全风险,推荐使用APEX自带的APEX_AUTHENTICATION.GET_HASH函数加密存储密码。
内容的提问来源于stack exchange,提问作者New User
相关产品推荐
相关产品推荐

