通过“单键锁配置法”实现访问控制

大家的权限是怎么做的呢?这里为大家介绍一个简单的权限管理方法。

访问控制主要是指按照用户身份和对应的权限来限制用户实施平台资源的使用和控制。通过指定不同的访问策略来控制用户对资源的访问。访问控制保障合法用户访问和授权使用特定的资源,防止非法主体或操作者对平台资源进行非授权的访问。

用户组包含一个或多个用户,它拥有特定的操作权限。一般情况下,用户会被分配不同的用户组中,而不是用户直接对应操作权限。每个用户组我们可以分配其一个 id;权限是具体操作的抽象概念,例如我们赋予 4 = 完全权限、3 = 删除权限、2 = 写入权限、1 = 只读权限、0 = 拒绝(没有权限)。而且权限由最高级到最低级之间可拥有继承的关系;资源指的则是保存在云平台的任何实体。

用户组、权限和资源是云平台访问控制中三个关键元素。应该通过一个什么样的结构和策略表现它们之间的关系呢?下一节将会详细讨论。

实现策略以及具体算法

通过权限矩阵列表可以展现用户组、权限和资源这三者关系,达到了访问控制的目的。

其中 Fi 表示可供访问的资源,Ui 表示用户组,通过二维关系反映了 Ui 用户组对资源 Fi 的权限,例如 U1 对应 F1 的权限是 4,表示拥有完全权限。当前假设 4 = 完全权限、3 = 删除权限、2 = 写入权限、1 = 只读权限、0 = 拒绝(没有权限)。

权限矩阵列表虽然可以清晰反映用户与权限之间的关系,但是实现过程中却带来不少问题。F1 的权限集合实际上是数字列表,如果将其简单保存起来,要考虑几个问题:1、一个权限对应一个用户组,如果用户组线性增长,权限也会随之线性增长,那么如何在数据库中设计出的列来保存权限?无论资源还是用户组,所有都放在一个列或行增加,则会出现 n 个列——那肯定也不合理,势必会违反数据库范式设计。2、用户组一旦发生改版,修改权限列表将涉及查找、删除等操作,都是比较耗时的操作。明显,我们将不能直接将权限矩阵列表简单保存起来,于是我们必须寻求另外一种合适的算法,可以有效而且方便地实现访问控制。

单键锁配置法

单键锁配置法的概念(Single Key-Lock Access Control)改变了传统访问控制的方式,能够使得访问控制变得方便有效。在此方法中不需要存储权限矩阵列表,仅需对每一个用户组 Ui 给定一个键值 Ki,并对每一个资源 Fj 给定一个锁值 Lj,通过运算即可求出 Ui 对 Ki 的访问权限 Rij。当操作者需要访问一个资源时,云平台系统会将操作者所在的用户组键值 Ki 与资源所对应的锁值 Lj,然后系统使用键锁配置技术求出所对应的访问权限 Rij,判断是否接受用户的访问请求。

这样,从数据库角度讲,资源表保存只需要一个字段保存锁值 Lj;用户组表只需要保存一个字段 Ki。

那么单键锁配置法的算法具体如何呢?利用“将一整数分解成质因数的乘积是唯一的特性”即可实现单键锁配置法。例如是 360 此值唯一的质因数表达式,其中 2、3、5 都是质数。

上面粗略介绍了单键锁配置法,现在结合此算法特性在详细解释。首先系统必须给予每个用户组一个键值,每一个资源一个锁值。其中每一个键值的 Ki 是不同的质数,锁值 Lj 是由键值计算所得。最后 Rij 表示权限矩阵列表中的权限值。如果用户 Ui 对资源 Fj 发出访问请求,先根据用户找到其所在的用户组,然后云平台可以通过下面算法来验证用户的访问权是否合法。

输入参数:用户组 Ui 的键值 Ki,资源 Fj 的锁值 Lj。

输出结果:用户组 Ui 对资源 Fj 的访问权限 Rij。

步骤1:输入 Ki 和 Lj

步骤2:设 Rij = 0,Temp = Lj。

步骤3:计算 Q=Temp/Ki。如果 Q是整数则 Rij++, Temp = Q;重复该步骤直到 Q 不是整数或者 Rij= Rmax。Rmax 是所在权限值的最大值。

步骤4:输出权限值 Rij。

关于资源锁值 Lj 是怎么求得呢?继续使用权限矩阵列表如下。

首先给予每一个用户组的键值 Ki 不同是质素,令 K1=2,K2=3,K3=5,K4=7,K5=11。按 F1 的权限值由上至下作为指数求出锁值:L1= =15120,L2=29106000,L3=686070,……。当用户U1要对资源F1访问时,系统可以找出对应的键 K1 和锁值 L1 来校验是否合法。

测试验证

伪代码验证如下:

int Rmax = 4; // 权限值的最大值

int getR(int Ki, int Lj) {

   int Rij = 0, Temp = Lj;

   Number Q; // Number 类型可以包含整数或浮点数

    while(true){

     if(Rij == Rmax)break;

     Q = Temp/Ki;

     if(isInt(Q)){ //  isInt() 判断是否整数

        Rij++;

              Temp = Q;

     } else break;

  }

  return Rij;

}

附:Java 生成任何整数的因子 https://www.oschina.net/code/snippet_778875_16087

import java.util.*;

public class ZYS {
    /**
     * 分析这个数是不是质数
     *
     * @param num
     */
    public static boolean isZhishu(int num) {
        switch (num) {
        case 1:
        case 2:
        case 3:
            return true;
        }

        int temp = 0;
        for (int i = 2; i < num / 2 + 1; i++) {
            if (num % i == 0) {
                temp++;
                break;
            }
        }

        if (temp != 0)
            return false;

        return true;
    }

    /**
     * 得到一个数所有的因数
     *
     * @param num
     * @return
     */
    public static List<Integer> zhengChu(int num) {
        List<Integer> integers = new ArrayList<Integer>();

        for (int i = 2; i < num / 2; i++) {
            if (num % i == 0)
                integers.add(i);
        }

        return integers;
    }

    /**
     *
     * @param args
     */
    public static void main(String[] args) {
        int num = 686070;

        Set<Integer> integers = new HashSet<Integer>();
        Set<Integer> integers2 = test(num, integers);
        System.out.println(integers2);
    }

    /**
     * 正式求解
     *
     * @param num
     * @param data
     * @return
     */
    public static Set<Integer> test(int num, Set<Integer> data) {
        if (data == null)
            data = new HashSet<Integer>();

        if (isZhishu(num)) {
//          System.out.println(nu÷m);
            data.add(num);
        } else {
            List<Integer> temp = zhengChu(num);
            for (Integer integer : temp)
                test(integer, data);
        }

        return data;
    }

}
时间: 2024-11-01 09:21:04

通过“单键锁配置法”实现访问控制的相关文章

苹果为什么设计了单键鼠标?

  我第一次见到Mac是在2001年,那时候洪恩有一个做音乐的流浪歌手,名为老郭,头发蓬乱,夹克坚硬,伊常常在午后橙色的阳光里,怀抱着吉他,安详的坐在Mac Pro前调音和谱曲.我清晰的记得,那个版本的OS X是10.2 Jaguar,充满科技感的金属拉丝界面让我们这些用惯了Windows和Linux的程序猿眼中充满了攫取的目光.奇怪的是,伊使用的鼠标没有像普通PC鼠标那样前半部分叉,而是一个浑然一体的半圆形,这一点让我们浮想联翩. 我凑过去问,这玩意是鼠标么?为什么没键? 郭哥懒洋洋的扭过头来

对于一个苹果单键鼠标如何在Ubuntu使用右键?

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   对于一个苹果单键鼠标如何在Ubuntu使用右键? 我在使用只有一个鼠标按键的Apple电脑.我如何才能完成按鼠标右键和按鼠标中键的操作呢? F11和F12键可以用来模拟这些操作.

监听按下电源键锁屏以及解屏

main.xml如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools

MongoDB 单键(列)索引

MongoDB支持基于集合文档上任意列创建索引.缺省情况下,所有的文档的_id列上都存在一个索引.基于业务的需要,可以基于一些重要的查询和操作来创建一些额外的索引.这些索引可以是单列,也可是多列(复合索引),多键索引,地理空间索引,文本索引以及哈希索引等. 本文主要描述在基于文档上的单列来创建索引. 一.创建语法 语法:db.collection.createIndex(keys, options) keys: 一个包含字段和值键值对的文档,指定该键即在该键上创建索引,如{age:1} 创建索引

拨号工具《单键拨号》限免中

<单键拨号OneTouchDial>是一个快速拨号应用程序,它可以让您创建快速拨号图标来进行呼叫,并且只需简单地触碰便可给您最喜爱的联系人发短信.让人们联系从来没有如此简单,您只需轻按一下便可与您最喜爱的联系人联系.<单键拨号OneTouchDial>应用截图使用技巧:编辑图标:触摸并按住2秒.在您想编辑的震动图标上轻击.重新排列图标:触摸并按住图像,然后将其拖动到所需的位置.添加联系人: 触摸屏幕上的一个空白方块,从您的联系人清单上选择你想要拨打的联系人. 默认的情况下,该联系人

MySQL5.5加主键锁读问题—续

背景        上一篇说到MySQL 5.5加主键导致阻塞源表的读的问题. 有同学提到从调用函数看,在默认的old_alter_table=off的情况下,加主键过程没有看到copy to tmp table.          这里我们再细说一下.   说说fast index creation          在MySQL 5.1以后InnoDB引入了fast index creation.在有这个feature之前,MySQL认为所有的加减索引操作都必须创建临时表.拷贝数据.删除源表

MySQL5.5加主键锁读问题

  背景      有同学讨论到MySQL 5.5下给大表加主键时会锁住读的问题,怀疑与fast index creation有关,这里简单说明下.   对照现象          为了说明这个问题的原因,有兴趣的同学可以做对比实验.     1)  在给InnoDB表创建主键期间,会锁住该表上的读数据     2) 但是同样的表执行删除主键期间,不会锁住该表上的读操作 ----这说明与是否fast index creation无关,因为这两个操作在数据层面的行为应该是类似的,实际上,创建/删除

Android(安卓) U8800 长按 搜索键、返回键 锁屏或解锁的设置方法

该设置办法适用于所有android手机,当然包括U8800了.   * 首先手机一定要有ROOT权限,关于如何获得ROOT权限,这里就不多说了,一般安装个ROOT的小软件就搞定了.   安装一个R.E管理器(Root Explorer),运行R.E软件,点上面的只读和改写切换按钮,将当前模式改为改写,然后进入到 /system/usr/keylayout 目录下,在触摸屏上长按 qwerty.kl 文件,在弹出的菜单中选择文本编辑器方式打开,编辑该文件的内容即可改变手机上每个按键的功能了,例如:

擦亮自己的眼睛去看SQL Server之谈谈锁机制

在谈谈SQL Server的锁机制之前,来思考以下这个场景:当你在酷暑的时候骑着自己的小车往目的地行走时,路上连续遇到几个时间很长的红灯,是不是很郁闷?有时候 你可能实在受不了闯了个红灯,其实在大部分情况下问题不大,如果通行的汽车很多那就不好说了.因为不遵守规则的人太多,都为了达到目的去走捷径,不愿意等 待.这样才有了交警.交警的作用就是维护这些红绿灯的规则.这些红绿灯就像锁一样,锁住或延长你去目的地的时间.但是如果没有交警大家又不自由遵守红绿灯 规则会导致什么呢?大家想想都知道. 这个系列的一