Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security Oracle Apex中的授权和用户角色?_Security_Permissions_Authorization_Roles_Oracle Apex - Fatal编程技术网

Security Oracle Apex中的授权和用户角色?

Security Oracle Apex中的授权和用户角色?,security,permissions,authorization,roles,oracle-apex,Security,Permissions,Authorization,Roles,Oracle Apex,因此,Apex有“工作区”,它允许您创建三种类型的用户——所有这三种类型本质上都是组织内部的用户。此外,对于Apex上单个站点的开发人员来说,似乎不可能只为其站点拥有“用户” 我错过什么了吗 我需要能够让外部(业务)用户能够访问网站的一些功能,例如,会计只能看到A和B页,而管理人员可以看到A、B和C页 我需要有能力有不同程度的访问几个群体的人 这只能通过创建工作区/组来实现吗?或者这可以在我的网站内部完成吗?虽然APEX有一个内置的用户管理概念,称为“组”,但我必须承认我从未使用过它,快速阅读文

因此,Apex有“工作区”,它允许您创建三种类型的用户——所有这三种类型本质上都是组织内部的用户。此外,对于Apex上单个站点的开发人员来说,似乎不可能只为其站点拥有“用户”

我错过什么了吗

我需要能够让外部(业务)用户能够访问网站的一些功能,例如,会计只能看到A和B页,而管理人员可以看到A、B和C页

我需要有能力有不同程度的访问几个群体的人


这只能通过创建工作区/组来实现吗?或者这可以在我的网站内部完成吗?

虽然APEX有一个内置的用户管理概念,称为“组”,但我必须承认我从未使用过它,快速阅读文档并不能让我清楚地知道如何使用这些来控制访问(但请参见此处)

您可能需要在数据库中创建用户/角色表,并将其与APEX授权方案结合使用,以控制对页面的访问。可以使用函数体创建“PL/SQL函数返回布尔值”类型的单一授权方案:

return my_auth_pkg.is_authorized (p_user    => :app_user,
                                  p_app_id  => :app_id
                                  p_page_id => :app_page_id);
然后,您将实现该包以查找用户的权限,并决定是否为应用程序和页面id返回TRUE或FALSE。

或者,您可以直接在授权方案中执行SQL检查访问:

(注意,“用户角色”和“角色页面”是我为表示您的表而编的名称)

我只想进一步展开,这本身是正确的。我只是想给大家展示另一种方法,我认为这对初学者来说更容易,并且省去了表格的创建

如果您的应用程序使用Apex作为身份验证方案,那么您的用户将通过工作区本身的管理来管理。您可以创建、编辑和删除用户,但也可以定义组,并将用户链接到组。您可以创建几个“最终用户”类型的用户,并定义几个组,如“高管”

创建组后,转到要将该组分配给的用户,并将该组添加到该用户的组中

一旦设置好,您仍然需要授权方案。事实上,在这里您仍然需要一些pl/sql知识,但由于一些方便的api工作,可以将编码保持在最低限度。 执行它所说的:它检查当前用户是否已指定组。通过使用一些简单的IF结构进行一些扩展,您可以将其提升一点


我并不完全推荐这种方法,我自己也觉得有点乏味,你需要有人进入APEX来实际维护用户和他们的组,但这在你的环境中是可以接受的。然而,你可以用它来开始。您可以非常轻松地切换出身份验证方案,通过更改您的授权方案,使其符合新的身份验证方案,您可以在以后轻松快速地进行调整。当然,这取决于您的优先级和目标。

授权是一个确定是否允许经过身份验证的人员访问资源或执行操作的过程。它基于分配给用户的一组权限或角色。例如,在Oracle数据库中,管理员有调度作业的权限,而用户不能。 授权与身份验证有何不同? 身份验证和授权通常一起工作。换句话说,授权遵循身份验证。 身份验证决定你是谁?
授权决定了你可以做什么?

我知道这已经很老了,但是谷歌把我带到了这里,所以我会尽量把我的5美分带进来。帮助了我很多,但我想利用APEX的团体补助金。例如,我有用户组:基本用户、高级用户和管理员用户。更高的用户级别也可以访问较低级别的应用程序/页面。如果我在组中使用APEX\u UTIL.CURRENT\u USER\u,我需要检查应该有访问权限的所有组。如果我添加另一个用户组,我必须将该组添加到每个应用程序的授权方案中。而且所有用户都需要在他们有权访问的所有组中

我的解决方案是检查APEX中的团体补助金。首先,我将用户添加到管理员用户组。之后,我将基本用户组和高级用户组添加到管理员用户组。这还不够,APEX不会为基本用户和APEX_UTIL的应用程序授予管理员用户访问权限。组中的当前用户也不知道这些。所以我对PL/SQL做了一些调整,我的授权方案如下:

DECLARE
    isInGroup BOOLEAN;
    userID    NUMBER(30);
    authGroup VARCHAR2(40);
    
    BEGIN
        authGroup := 'Basic User';                  -- User group to look for
        isInGroup := false;
        userID    := APEX_UTIL.GET_CURRENT_USER_ID;
    
        FOR a IN (
            SELECT wf.group_name AS group FROM wwv_flow_group_users wf WHERE wf.user_id = userID
            UNION
            SELECT gg.group_name FROM wwv_flow_group_users gu 
            RIGHT JOIN apex_workspace_group_groups gg ON gg.grantee_name = gu.group_name
            WHERE user_id = userID) 
        LOOP
            IF a.group = authGroup THEN
                isInGroup := true;
            END IF;
        END LOOP;
    
    RETURN isInGroup;
    END;
在UNION获取当前用户所属的所有组的名称之前,请先选择,在我的示例中,仅限Admin用户。联合后的第二个选择是第一个选择中的组可以访问的所有组的列表。在我的例子中,基本用户和高级用户。在循环中迭代整个组,如果其中一个组等于开始时定义的authGroup,则返回true


通过这种方式,我可以将新用户添加到其相应的组中,他们也可以访问较低级别的应用程序。

创建时,您可以在APEX授权方案的“功能体”属性中输入它。啊,好的。因此,这也是我创建检查的地方,以查看我的db表是否包含正确的信息?在服务器上创建的包中,我将在哪里声明/定义“已授权”。你需要知道PL/SQL.PL/SQL中的Dummies+1很好,现在我知道如何使用内置组了!在回答之前,我已经查看了apex_util文档,但没有看到该函数。只是一个观察:表达式1中的代码可以简化为:<代码>返回apex_util.current_user_in_group(p_group_name=>'executies')我在这里实现了你的答案,汤姆,它在限制方面确实有效