【问题标题】:Is it possible to create view-level permissions with Oracle and MS Access?是否可以使用 Oracle 和 MS Access 创建视图级权限?
【发布时间】:2016-03-08 16:15:40
【问题描述】:

我们正在建立一个 Oracle 11g 数据存储库,用户可以在其中通过 ODBC(2003 年到 2010 年的 MS Access 版本)通过多个 Microsoft Access 前端连接到视图。 Microsoft Access 前端位于网络驱动器上,并在打开时通过已发布的快捷方式复制到本地 Citrix 会话。

单个 Access 前端文件(每个用户打开一个单独的副本)将连接到数据存储库中的多个视图,并且每个前端将有多个具有不同权限的用户,这些权限应该是基于用户或角色的。

由于遗留 VBA 错误,无法编译 MS Access 前端。

如果需要更多信息,请告诉我 - 我担心问题过于简单。

【问题讨论】:

    标签: oracle ms-access odbc frontend citrix


    【解决方案1】:

    我不知道您问题的访问部分,但可以将视图配置为根据用户角色或权限显示或隐藏。有几种不同的方法,但它们都需要至少一条信息:

    当您连接到 Oracle 时,您是谁?您是否以 Active Directory 成员、通用角色或其他成员身份登录?

    传统方式是每个用户都有一个 Oracle 帐户。然后在 Oracle 中创建角色并将视图的选择权限授予角色。通过向用户授予角色来完成。这给出了 view_level 读取。

    在这里实现行级权限是伪代码中的一个示例。这不是为了完成或编译:

    • 通过在前端 (Access) 中拥有 Active Directory 帐户和密码来授权用户
    • 数据库中有一张 AD 用户表
    • 角色表
    • 用户拥有的角色表
    • 读取、更新、删除等权限表
    • 角色和权限表
    • 如果可以,请使用附加权限来简化事情(即,如果您已阅读和更新,则可以同时执行这两项操作)

    行级权限视图可以按照以下方式构建

    CREATE OR REPLACE VIEW my_view as
    SELECT various columns from ......
    WHERE  GET_USER_PERMISSIONS(parameter1_in, parameter2_in) = 1;
    

    函数可能类似于

    CREATE OR REPLACE FUNCTION 
    GET_USER_PERMISSIONS(parameter1_in NUMBER, parameter2_in NUMBER) 
    RETURN NUMBER IS
    v_username VARCHAR2(50);
    v_count NUMBER(9);
    v_can_read NUMBER(9) := 0;
    BEGIN
    SELECT SYS_CONTEXT('USERENV','SESSION_USER')
    INTO v_username
    FROM DUAL;
    
    select count(arp.permission_value)
    into v_count
    from app_user au,
    app_user_role aur, app_role_permission arp
    where au.user_id = aur.user_id
    and aur.role_id = arp.role_id
    and au.user_id = v_username
    and arp.permission_value = 'READ');
    IF v_count => 1
    THEN
      v_can_read := 1;
    END IF;
    
    RETURN v_can_read;
    END;
    

    例如,如果您有 200 家公司和 20 位用户,并且每个用户对一个或多个公司有一个或多个操作组合,您需要在权限表中构建它,然后使用自定义用户函数来实现。

    当然,还有更复杂的方法可以做到这一点,包括使用Oracle Virtual Private Database(许可功能)对单个列进行屏蔽,但我怀疑这太过分了。

    【讨论】:

    • 这对我来说看起来不错。我犹豫要不要回答,因为我在 Oracle 方面的经验非常有限,但我相当肯定它必须具有与 SQL Server 上的“Windows 身份验证”选项相当的功能。一个小问题是,可能不需要向 Access 前端提供密码,因为用户在登录到 Windows 网络时已经进行了身份验证。他们的 AD 凭据应该已经可供 Access 前端使用,然后可以将它们传递给 Oracle 数据库。
    • @GordThompson 这个问题没有给我们详细说明用户是如何进行身份验证的,而且我不熟悉 Access 角色模型,所以我只是添加了进入 Oracle 所需的最低要求:身份验证
    • @kevinsky 我对它的理解(请原谅我的错误,我不是专家,只是被分配到这个的人)是用户通过 Windows 端的 AD 组进行身份验证,然后使用 Oracle 中的服务帐户。
    猜你喜欢
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    相关资源
    最近更新 更多