ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 数据库 >> DB2 >> DB2权限管理-组(group 和角色(role的区别

DB2权限管理-组(group 和角色(role的区别(1/2)

来源:网络整理     时间:2017-05-03     关键词:

本篇文章主要介绍了" DB2权限管理-组(group 和角色(role的区别",主要涉及到方面的内容,对于DB2感兴趣的同学可以参考一下: DB2权限管理中组和角色的管理的确让很多人(不管是菜鸟还是老鸟)感到困惑。 相对而言,oracle就好多了,根本就没有组的概念,只有角色。 而在D...

       DB2权限管理中组和角色的管理的确让很多人(不管是菜鸟还是老鸟)感到困惑。 相对而言,oracle就好多了,根本就没有组的概念,只有角色。 而在DB2和Oralce的概念映射里,DB2的组实际上也被影射为Oracle的角色。 这说明原来组和角色原来是差不多的东西啊!

       其实,从实际应用角度而言,的确是那么回事,组和角色在很多时候是可以互换的。虽然定义有所不一样。

       组(group)  - 一组用户的集合,就是LUW(linux/unix/Windows)中操作系统所管理的组,组的创建,修改,维护都是在数据库之外的OS级别进行的。

       角色(role)    - 一组权限的集合,是数据库级别进行创建,修改和维护的。

 

       从定义上看,还是完全不同的东西嘛。但是如果仔细一想,其实他们解决的是相同的问题。就是为了方便权限的管理,批量的赋予用户权限。下面我们就举一个具体例子来说明三种情况下的权限管理。

        权限需求: 某个数据库中有HR的两张表TAB1和TAB2,HR部门有两个数据库用户,分别是HR_USR1和HR_USR2,  这两个用户需要对这两张表有SELECT权限。

                            同时此数据库中Finance部门有两张表TAB3和TAB4,Finance部门有两个用户,分别是FN_USR1和FN_USR2,  这两个用户需要对这两张表有SELECT权限。

表名用户权限 
HR.TAB1HR_USR1SELECT 
HR.TAB2HR_USR1SELECT 
FN.TAB3FN_USR1SELECT 
FN.TAB4FN_USR1SELECT 
HR.TAB1HR_USR2SELECT 
HR.TAB2HR_USR2SELECT 
HR.TAB3FN_USR2SELECT 
HR.TAB4FN_USR2SELECT 

第一种: 即不使用组也不是用角色,具体赋权SQL如下:

grant SELECT on HR.TAB1 to user HR_USR1;
grant SELECT on HR.TAB2 to user HR_USR1;
grant SELECT on FN.TAB3 to user FN_USR1;
grant SELECT on HR.TAB4 to user FN_USR1;
grant SELECT on HR.TAB1 to user HR_USR2;
grant SELECT on HR.TAB2 to user HR_USR2;
grant SELECT on FN.TAB3 to user FN_USR2;
grant SELECT on HR.TAB4 to user FN_USR2;

第二种:只使用组,具体步骤如下(假设操作系统是Linux):
    1. 在操作系统上创建两个组HR_GRP, FN_GRP

groupadd HR_GRP
groupadd FN_GRP

    2. 在操作系统上将已经存在的用户HR_USR1,HR_USR2加入HR_GRP,  将FN_USR1,FN_USR2加入FN_GRP
usermod -G HR_GRP HR_USR1
usermod -G HR_GRP HR_USR2
usermod -G FN_GRP FN_USR1
usermod -G FN_GRP FN_USR2

    3.具体赋权SQL如下:

grant SELECT on HR.TAB1 to group HR_GRP;
grant SELECT on HR.TAB2 to user HR_GRP;
grant SELECT on FN.TAB3 to user FN_GRP;
grant SELECT on FN.TAB4 to user FN_GRP;

第三种:只使用角色,具体赋权SQL如下:
--创建角色

create role HR_ROLE;
create role FN_ROLE:

--定义角色权限
grant SELECT on HR.TAB1 to role HR_ROLE;
grant SELECT on HR.TAB2 to user HR_ROLE;
grant SELECT on FN.TAB3 to user FN_ROLE;
grant SELECT on FN.TAB4 to user FN_ROLE;

--将角色赋予用户

grant role HR_ROLE to user HR_USR!,HR_USR2;
grant role FN_ROLE to user FN_USR1,FN_USR2;

是不是条条大路通罗马? 上面三种方式都能完成任务。但是孰优孰劣呢? 毫无疑问,没有人会喜欢第一种,当用户数量(m)和表的数量(n)都很多的时候,赋权语句的复杂度是O(mxn), 第二种和第三种的复杂度是O(m). 那么第二种和第三种哪种好呢?这个仁者见仁,智者见智, 我自己倾向于第三种(使用角色)。理由如下:

相关图片

相关文章