当前位置: 首页 > 面试题库 >

如何为访问控制列表(ACL)建立数据模型

易英奕
2023-03-14
问题内容

当您只在与具有某种级别对离散资源访问权限的离散用户打交道时,如何为将充当访问控制列表(ACL)的数据库表建模是很明显的。像这样的东西:

TABLE acl ( user_id INT, resource_id INT, access_type INT )

…其中access_type是一个表示类似以下内容的数字:

0(或缺少user_id和resource_id的记录)表示没有访问权限

1表示只读

2表示完全控制

但是,当您遇到这样的场景时,例如用户可以成为一个或多个组的成员,并且组可以包含其他组,则它变得越来越棘手。然后,资源可以是包含其他资源的文件夹。

除了在运行时执行一堆递归查询以确定用户对资源的访问级别这一明显差的方法之外,这些方案又将如何得到处理?是否有用于设计这样的ACL的通用设计?


问题答案:

您是否正在使用支持connect by或类似功能的数据库?在oracle中,我实现了以下内容。

Table Group //Just the parent groups
{
    groupCode varchar
    groupDesc
}

Table groupMap //associates groups with other groups
{
    parentGroup
    childGroup
}

table userGroup //can assign user to more than one group
{
    userId
    groupCode
}

然后用于connect by获取用户的所有子组

SELECT rm.CHILDGroup as roleCode
FROM groupMap rm
CONNECT BY PRIOR rm.CHILDGroup = rm.PARENTGroup
START WITH rm.CHILDGroup in
  (SELECT ur.groupCode
   FROM userGroup ur
   WHERE ur.userId = &userId);

该查询将获取分配给用户的userGroup所有组以及分配给用户所属组的所有子组。



 类似资料:
  • haproxy 的 ACL 用于实现基于请求报文的首部、响应报文的内容或其它的环境状态信息来做出转发决策,这大大增强了其配置弹性。其配置法则通常分为两步,首先去定义ACL,即定义一个测试条件,而后在条件得到满足时执行某特定的动作,如阻止请求或转发至某特定的后端。定义ACL的语法格式如下。 acl <aclname> <criterion> [flags] [operator] <value> ..

  • 传统的Linux文件系统的权限控制是通过user、group、other与r(读)、w(写)、x(执行)的不同组合来实现的。随着应用的发展,这些权限组合已不能适应现时复杂的文件系统权限控制要求。例如,我们可能需把一个文件的读权限和写权限分别赋予两个不同的用户或一个用户和一个组这样的组合。传统的权限管理设置起来就力不从心了。为了解决这些问题,Linux开发出了一套新的文件系统权限管理方法,叫文件访问

  • 主要内容:开启 ACL 权限Linux 系统传统的权限控制方式,无非是利用 3 种身份(文件所有者,所属群组,其他用户),并分别搭配 3 种权限(读 r,写 w,访问 x)。比如,我们可以通过 ls -l 命令查看当前目录中所有文件的详细信息,其中就包含对各文件的权限设置: [root@localhost ~]# ls -l total 36 drwxr-xr-x. 2 root root 4096 Apr 15 16:33

  • 在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里。 在开始下一步前,先Build一下应用程序(生成应用程序)(确保应用程序编译没有问题) 在解决方案上,用鼠标右键单击Controller文件夹,点击新增,再选择Controller。 在Scaffold新增对话框,选择MVC 5 Controll

  • Controlling data access(数据访问控制) 指定用户角色 用户 access 类型 定义访问控制 使用该ACL构建器 Example Applying access control rules ACL rule precedence Debugging Specifying user roles(指定用户角色) 第一步确定需要什么样的权限是 app 需要的, 大多数限制在于 区

  • 变量acl的默认值是。也如Terraform S3 bucket属性引用文档所述。 对于这个bucket,它被设置为。 我想更新它以添加以下授权并删除相互冲突的acl: null