oracle apex 18.2 自定义认证和授权

use*_*688 0 oracle-apex oracle12c

我正在 oracle Apex 18.2 中开发一个小型 ERP 我想实现如下所列的自定义安全性

1) 用户应从自定义表中进行身份验证

2) 身份验证后,用户应根据自定义表中的分配角色授权应用程序

3) 用户必须拥有对表的 READ、INSERT、UPDATE 和 DELETE 操作的授权

作为示例图像

根据我的一点知识,我已经做了一些谷歌搜索,但有很多令人困惑的选项,需要推荐和建议。

Adr*_*n P 5

1) 用户应从自定义表中进行身份验证

  • 创建身份验证方案并将方案类型设置为Custom
  • 实现身份验证功能并将代码放在 PL/SQL 代码部分。该函数提供了从登录页面输入的用户名和密码。使用它来验证匹配。始终加密用户的密码。函数根据结果返回真或假。

以下是从页面构建器中的帮助文本中复制的可用示例代码:

function my_authentication (
    p_username in varchar2,
    p_password in varchar2 )
    return boolean
is
    l_user my_users.user_name%type := upper(p_username);
    l_pwd  my_users.password%type;
    l_id   my_users.id%type;
begin
    select id  , password
    into l_id, l_pwd
    from my_users
    where user_name = l_user;
    return l_pwd = rawtohex(sys.dbms_crypto.hash (
                    sys.utl_raw.cast_to_raw(p_password||l_id||l_user),
                    sys.dbms_crypto.hash_sh512 ));
exception
    when NO_DATA_FOUND then return false;
end;
Run Code Online (Sandbox Code Playgroud)
  • 将真实功能设置为 my_authentication

2) 身份验证后,用户应根据自定义表中的分配角色授权应用程序

  • 再次在 PL/SQL 代码区域中,实现验证后过程,例如 post_login,检索用户的角色并将它们添加到应用程序项或 APEX 集合。
  • 将过程名称添加到字段认证后过程名称,例如 post_login
  • 根据上述值创建授权方案。

或者

只需创建一个 Authorization Scheme 来简单地即时查询相同的信息,尽管根据调用这些授权的频率可能会对性能造成很小的影响。

3) 用户必须拥有对表的 READ、INSERT、UPDATE 和 DELETE 操作的授权

  • 您可以根据授权方案限制页面、页面项目(只读或可编辑)、按钮和进程。
  • 根据您的 Oracle 许可,您还可以实施 Oracle Real Application Security (RAS) 或 Virtual Private Databases (VPD) 来管理“数据库级别”的访问,这绝对更安全。