Oracle apex oracle apex 18.2自定义身份验证和授权

Oracle apex oracle apex 18.2自定义身份验证和授权,oracle-apex,oracle12c,Oracle Apex,Oracle12c,我正在oracle Apex 18.2中开发一个小型ERP,我想实现如下所示的自定义安全性 1) 用户应通过自定义表进行身份验证 2) 身份验证后,用户应根据自定义表中指定的角色授权给应用程序 3) 用户必须具有从表中读取、插入、更新和删除操作的权限 举例来说 我在谷歌上搜索过一些内容,但根据我所知,有很多令人困惑的选项,需要推荐和建议。1)用户应该从自定义表中进行身份验证 创建一个身份验证方案,并将方案类型设置为Custom 实现身份验证功能并将代码放在PL/SQL代码部分。该函数提供了从登

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

1) 用户应通过自定义表进行身份验证

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

3) 用户必须具有从表中读取、插入、更新和删除操作的权限

举例来说

我在谷歌上搜索过一些内容,但根据我所知,有很多令人困惑的选项,需要推荐和建议。

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

  • 创建一个身份验证方案,并将方案类型设置为
    Custom
  • 实现身份验证功能并将代码放在PL/SQL代码部分。该函数提供了从登录页面输入的用户名和密码。使用它来验证匹配。始终加密用户的密码。函数根据结果返回true或false
以下是从页面生成器的帮助文本中复制的可用示例代码:

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;
  • 将Authentic函数设置为
    my\u身份验证
2) 身份验证后,用户应根据自定义表中指定的角色授权给应用程序

  • 同样在PL/SQL代码区域中,实现后身份验证过程,例如,
    post_login
    ,该过程检索用户的角色,并将其添加到应用程序项或APEX集合
  • 将过程名称添加到“认证后过程名称”字段中,例如
    Post\u login
  • 基于上述值创建授权方案

只需创建一个授权方案,该方案只需动态查询相同的信息,尽管根据调用这些授权的频率,可能会对性能造成小的影响

3) 用户必须具有从表中读取、插入、更新和删除操作的权限

  • 您可以根据授权方案限制页面、页面项目(只读或可编辑)、按钮和流程
  • 根据您的Oracle许可证,您还可以实施Oracle Real Application Security(RAS)或虚拟专用数据库(VPD),以在“数据库级别”管理访问,这无疑更加安全
1)用户应通过自定义表进行身份验证

  • 创建一个身份验证方案,并将方案类型设置为
    Custom
  • 实现身份验证功能并将代码放在PL/SQL代码部分。该函数提供了从登录页面输入的用户名和密码。使用它来验证匹配。始终加密用户的密码。函数根据结果返回true或false
以下是从页面生成器的帮助文本中复制的可用示例代码:

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;
  • 将Authentic函数设置为
    my\u身份验证
2) 身份验证后,用户应根据自定义表中指定的角色授权给应用程序

  • 同样在PL/SQL代码区域中,实现后身份验证过程,例如,
    post_login
    ,该过程检索用户的角色,并将其添加到应用程序项或APEX集合
  • 将过程名称添加到“认证后过程名称”字段中,例如
    Post\u login
  • 基于上述值创建授权方案

只需创建一个授权方案,该方案只需动态查询相同的信息,尽管根据调用这些授权的频率,可能会对性能造成小的影响

3) 用户必须具有从表中读取、插入、更新和删除操作的权限

  • 您可以根据授权方案限制页面、页面项目(只读或可编辑)、按钮和流程
  • 根据您的Oracle许可证,您还可以实施Oracle Real Application Security(RAS)或虚拟专用数据库(VPD),以在“数据库级别”管理访问,这无疑更加安全

我认为动态列表应该有所帮助。您的后续问题含糊不清,听起来与原始问题不相关。也许你应该发布一个新问题。谢谢感谢您提供的解决方案,请您根据我的要求和您提供的解决方案分享任何演示或源项目,因为给出的解决方案很好,提示我清楚地得到了您的答案,我需要一些示例项目,其中包括示例数据和实际实施。我提供给您的指南应该足以让您开始。我确实有一些代码是为我在TFA和APEX()上的博客文章编写的。这并不完全是你想要的,但是有些想法和方法是差不多的。除此之外,为什么不在apex.oracle.com上创建一个工作区,自己动手做一个原型呢?如果您遇到任何问题,请向我提供开发人员帐户,我可以进一步指导您。您将从体验中受益,而不是复制和粘贴代码。是的,您是对的。感谢帮助,我如何向您提供开发人员帐户、您的电子邮件或任何联系人?在Twitter或Slack(apex.world)上给我留言。我想动态列表应该会有所帮助。您的后续问题含糊不清,听起来与原始问题不相关。也许你应该发布一个新问题。谢谢感谢您提供的解决方案,请您根据我的要求和您提供的解决方案分享任何演示或源项目,因为给出的解决方案很好,提示我清楚地得到了您的答案,我需要一些示例项目,其中包括示例数据和实际实施。我提供给您的指南应该足以让您开始。我确实有一些代码是为我在TFA和APEX()上的博客文章编写的。这并不完全是你想要的,但是有些想法和方法是差不多的。除此之外,为什么不在apex.oracle.com上创建一个工作区并开始一个