论文部分内容阅读
摘 要:针对开发“煤矿安全隐患识别、预警与整改控制信息平台”的需要, 设计了一个在 .NET环境下基于角色的权限管理方案。通过分析传统权限控制设计中存在的问题和不足,结合基于角色的访问控制的原理,提出的权限控制系统利用模块编码、页面编码、功能编码和数据库的灵活设计来实现权限的控制。该方案实现了页面级别和页面内功能级别的权限控制,很好的解决了传统权限控制设计的不足,大大的提高了系统的灵活性和可扩展性,并且已经把它作为一个组件实现,可以应用于多种MIS系统的权限管理。
关键词:权限管理;B/S;管理信息系统(MIS);访问控制
中图分类号:TP309.2文献标识码:A文章编号:1672-1098(2009)01-0047-04
收稿日期:2008-10-09
作者简介:周光亮(1982-)男,山东高密人,在读硕士,研究方向:生产安全MIS系统的设计与开发。
Design of Role-based Access Privilege Management
Solution Under .NET Environment
ZHOU Guang-liang,LIU Quan-lin,WANG Xi-liang
(School of Computer Science And Engineering,Anhui University of Science and Technology,Huainan Anhui 232001,China)
Abstract: In order to develop a information platform of hidden danger recognition, early warning and control measures for coal mnies, a role-based access privilege management solution under .NET environment was designed.Analyzing disadvantages of traditional access control design,according to the principle of role-based access privilege control,it is put forwad that using module code, page code,function code and skillful design of DB to implement access privilege control. By the solution access privilege control on page-level and function-level access privilege control on pages were realized, resolving disadvantages of traditional access privilege control design and improving system’s flexibility and expansibility,which was designed as a component,and can be applied in access privilege management of various MIS.
Key words:privilege management;B/S;management information system;access control
随着网络技术的发展和Internet 的普及,Web 友好的用户界面和方便的用户操作,使得越来越多的管理信息系统(MIS)构架于互联网平台上,基于B/ S 模式结构的信息系统逐渐代替了基于C/ S 模式结构的信息系统。由于B/ S 模式系统的特性,使得基于Web 的管理信息系统的安全问题越来越突出,系统权限的管理问题也越来越为人们所关注[1] 。如何建立有效的权限控制策略以阻止不合法登录及合法用户任意访问、修改其范围外的数据一直是研究的焦点。本文正是针对开发“煤矿安全隐患识别、预警与整改控制信息平台”管理信息系统(MIS)的需要,实现了一个基于角色的权限管理方案,具有实用价值。
2 基于角色的权限管理方案
2.1 权限管理的要求
访问控制是针对越权使用资源的防御措施。基本目标是为了限制访问主体(用户、进程、服务等)对访问客体(文件、系统等)的访问权限,从而使计算机系统在合法范围内使用;决定用户能做什么,也决定代表一定用户利益的程序能做什么。
对于企业环境中的访问控制,一般有三种方法:自主型访问控制[2](Discretionary Access Control, DAC)、强制型访问控制(Mandatory Access Control,MAC)和基于角色的访问控制(Role-Based Access Control,RBAC)。其中,基于角色的访问控制是目前应用普通的统一资源访问控制方法。它能减少授权管理的复杂性,降低管理开销和灵活地支持企业的安全策略,对企业的变化有很大的伸缩性。这里主要讨论基于角色的访问控制。
2.2 基于角色控制的优势
角色是用户和权限之间的数据中间层,一方面权限与角色关联,另一方面,用户作为相关角色的成员。通过对用户的分析发现,虽然系统中用户的数量在不断地增加,但因为系统的功能相对有限,就会产生某一类用户有着相同的权限,可以事先将这些权限打包起来作为一个集合,然后再将这个集合赋给用户。这个集合称之为“ 角色”(也称为组),以后在对用户进行权限设定的时候,不是为每个用户定义其对各个对象的操作权限,而是直接把一个它所属的角色赋予它,这样该用户就间接拥有了该角色的所有权限。并且因为角色可以同时赋给多个用户,以后要对该类用户进行权限修改时,只需更改一次角色的权限集合的内容,就可以完成修改,非常便捷。通过角色将用户和权限分开,一方面是可以防止非法用户登录系统,另一方面又可防止合法用户对系统资源的非法使用。
2.3 权限管理系统的核心对象模型
根据RBAC模型的权限设计思想,建立权限管理系统的核心对象模型。对象模型中包含的基本元素主要有:用户(Users)、角色(Role)、权限(Permission)、操作(Operator)。主要的关系有:分配角色权限PA(Permission Assignment)、分配用户角色UA(Users Assignment)描述如下[3]: ① 用户是权限的拥有者或主体,用户和权限实现分离,通过授权管理进行绑定;② 角色为权限分配的单位与载体;③ 权限为对某一数据对象的可操作权利,如在数据库中对数据对象的insert、delete、select、alter,存储过程的执行等,一项权限就是可以对某一特定数据对象进行某一特定操作的权利;④ 操作为完成资源的类别和访问策略之间的绑定;⑤分配角色权限PA为实现操作和角色之间的关联关系映射;⑥分配用户角色UA为实现用户和角色之间的关联关系映射。
3 权限管理系统的数据库设计
基于角色的权限管理系统主要研究用户、角色、权限、操作以及它们之间的关系, 相应的数据库表结构有用户信息表、角色信息表、权限信息表、角色权限对照表、树形结构节点表、角色与树形节点对照表等(列出的为主要字段)。数据库表结构及表间关系如下(见图1)。
4 应用功能权限管理的实现
4.1 用户授权
即给用户分配角色,把一个或若干个角色分配给指定用户即可,用户—角色的分配包括定义角色的层次关系。在用户与角色关系中, 用户是对受控数据对象(树型节点和页面功能项) 进行操作的主体, 角色对应企业中特定的职能岗位, 拥有处理某些功能项的许可。在整个系统中不存在无职责的用户[4],每一个用户按其职能和责任被赋予一定的角色,通过角色享有操作功能项的权限。
4.2 授权管理
其主要工作是角色—树形节点项的分配和角色-页面内部功能项的分配。
(1) 角色—树形节点项的分配及实现 确定登陆用户对应角色对哪些树形节点具有相应的操作权限,即在用户登陆系统之后,系统根据用户所属角色显示其相应的树形结构。在一个用户登陆时,首先用会话Session变量记录该用户的登陆帐号,即Session["userLoginCount"],因而,利用系统用户表中登陆帐号与用户角色一对一的关系,通过Basic_SystemUser表中的roleID在Basic_TreeViewRole表中查找等于roleID的所有节点的treeNodeId,然后通过在表Basic_TreeNode中查找所有相应的节点,通过以下算法显示出来,得到的树形结构与该用户角色所有权限相对应。
sqlstring="查找出与该登陆用户相应角色的所有节点”;//(string)Session["userLoginCount"]private void bindtvParentUserGroup(TreeNode tnTwo)//在总目录下...添加 "父级树结点"
{
DataSet ds = XF.Common.DBOperator.DBOperator.Instance().FillDataSet(查找出与该登陆用户相应角色的所有节点的SQL语句);
DataTable dtBF = ds.Tables[0];
DataRow[]RowList = dtBF.Select("fatherNodeId = '0'");//根节点的父节点ID为0
if (RowList.Length > 0)
{
for (int i = 0; i < RowList.Length;i++)
{
TreeNode tnTwoUG=new TreeNode();//定义控件中的节点
tnTwoUG.Text = RowList[i]["nodeName"].ToString();//nodeName 为节点名称
tnTwoUG.Value = RowList[i]["innerId"].ToString();//innerId 为节点的主键
tnTwoUG.Expanded = true;//节点自动展开
tnTwo.ChildNodes.Add(tnTwoUG);//总目录下添加子结点(父级树结点)
bindtvChildUserGroup(tnTwoUG, dtBF);//在父级树结点下添加"子结点"
}
}
}
private void bindtvChildUserGroup(TreeNode tnThre, DataTable dtChild)
{
DataRow[]RowList = dtChild.Select("fatherNodeId = '" + tnThre.Value+"'");
if (RowList.Length > 0)
{
for (int j = 0; j < RowList.Length; j++)
{
TreeNode tnThreUG = new TreeNode();//定义控件中的节点
tnThreUG.Text = RowList[j]["nodeName"].ToString();//nodeName 为节点名称
tnThreUG.Value = RowList[j]["innerId"].ToString();//innerId 为节点的主键
tnThreUG.Expanded = true;//节点自动展开
tnThre.ChildNodes.Add(tnThreUG);//父级树节点目录下添加子结点(子级树节点)
bindtvChildUserGroup(tnThreUG,dtChild);//实现递归
}
}
}
}
(2) 角色—页面内部功能项分配及实现 由于.net环境中,每一个控件都有自己唯一的控件编程名称(可以自己命名),利用这个特点,可以给每一个需要权限访问的控件采用统一的命名规则,例如:某一页面中的Button1控件命名为competency_PositionManage_Button1。然后,给每一个角色分配相应的控件访问权限或操作,并且存储在表Basic_RolePermission中。在一个用户登陆时,首先用会话Session变量记录该用户的登陆帐号,即Session["userLoginCount"],当用户点击树形结构中的叶子节点是,系统会根绝该用户的角色显示相应的具有操作权限的控件或和执行的操作。其原理是:利用系统用户表中登陆帐号与用户角色一对一的关系,通过Basic_SystemUser表中的roleID在Basic_RolePermission表中查找等于roleID的所有permissionId,通过permissionId得到permissionMark(权限标示或控件编程名称),与页面中查找所有控件,如果名称相同则有操作权限,反之,则没有相应的操作权限,将该控件的显示属性设定为false.主要程序如下:
//权限判断函数
public bool ValidateCompetency(string competencyMark)//传入的是单个权限的标识
{
………
if (页面中的控件标示(编程名称)不是以‘competnecy’开头) //不是为ture
retn = true;
else
{
传入的权限标示与数据库表中该角色的所有权限标示比较,如果为真,返回true;
}
return retn;
}
//页面加载时函数部分
for (int i = 0;i < this.Page.FindControl("form1").Controls.Count;i++)//循环页面中所有控件
{
string competency = this.Page.FindControl("form1").Controls[i].ID;
if (competency!=null && !ui.ValidateCompetency(competency))//传入控件id,判断是否有权限,如果控件不为空且权限验证返还false
this.Page.FindControl("form1").Controls[i].Visible =false;//若当前用户没有此权限,隐藏此控件
}
5 总结
采用该权限管理方案,把用户和功能通过角色连接起来,并且在此基础上把特定的用户和特定的页面及其页面内的功能操作范围很好地匹配起来,从而能很好的解决B/S模式下的权限管理问题,能够管理每一个页面。这种机制结构清晰,开发工作量小,管理效果比较明显。并且他已作为一个组件来实现,与MIS系统有相应的接口。本方案不仅仅适应于“煤矿安全隐患识别、预警与整改控制信息平台”系统,同样适用于B/S模式下的其他管理信息系统。
参考文献:
[1] 高正宪,李中学.Web 环境下基于角色的访问控制策略及实现[J].计算机工程,2004,30(8):133-135.
[2] 张荣博,李胜宇,李席广,等.基于角色访问控制的研究与应用[J].沈阳航空工业学院,2007,24(1):41-43.
[3] 裴辉东,梁云风.基于RBAC模型的权限管理系统的设计和实现[EB/OL].[2008-9-28]http:∥www.amd ong.cn/yyal/2007 03 145 asp.
[4] 刘燕,李慧强,胡义刚.技术信息系统中基于角色的权限管理系统[J].机床与液压,2004(10):222-226.
(责任编辑:李 丽)
关键词:权限管理;B/S;管理信息系统(MIS);访问控制
中图分类号:TP309.2文献标识码:A文章编号:1672-1098(2009)01-0047-04
收稿日期:2008-10-09
作者简介:周光亮(1982-)男,山东高密人,在读硕士,研究方向:生产安全MIS系统的设计与开发。
Design of Role-based Access Privilege Management
Solution Under .NET Environment
ZHOU Guang-liang,LIU Quan-lin,WANG Xi-liang
(School of Computer Science And Engineering,Anhui University of Science and Technology,Huainan Anhui 232001,China)
Abstract: In order to develop a information platform of hidden danger recognition, early warning and control measures for coal mnies, a role-based access privilege management solution under .NET environment was designed.Analyzing disadvantages of traditional access control design,according to the principle of role-based access privilege control,it is put forwad that using module code, page code,function code and skillful design of DB to implement access privilege control. By the solution access privilege control on page-level and function-level access privilege control on pages were realized, resolving disadvantages of traditional access privilege control design and improving system’s flexibility and expansibility,which was designed as a component,and can be applied in access privilege management of various MIS.
Key words:privilege management;B/S;management information system;access control
随着网络技术的发展和Internet 的普及,Web 友好的用户界面和方便的用户操作,使得越来越多的管理信息系统(MIS)构架于互联网平台上,基于B/ S 模式结构的信息系统逐渐代替了基于C/ S 模式结构的信息系统。由于B/ S 模式系统的特性,使得基于Web 的管理信息系统的安全问题越来越突出,系统权限的管理问题也越来越为人们所关注[1] 。如何建立有效的权限控制策略以阻止不合法登录及合法用户任意访问、修改其范围外的数据一直是研究的焦点。本文正是针对开发“煤矿安全隐患识别、预警与整改控制信息平台”管理信息系统(MIS)的需要,实现了一个基于角色的权限管理方案,具有实用价值。
2 基于角色的权限管理方案
2.1 权限管理的要求
访问控制是针对越权使用资源的防御措施。基本目标是为了限制访问主体(用户、进程、服务等)对访问客体(文件、系统等)的访问权限,从而使计算机系统在合法范围内使用;决定用户能做什么,也决定代表一定用户利益的程序能做什么。
对于企业环境中的访问控制,一般有三种方法:自主型访问控制[2](Discretionary Access Control, DAC)、强制型访问控制(Mandatory Access Control,MAC)和基于角色的访问控制(Role-Based Access Control,RBAC)。其中,基于角色的访问控制是目前应用普通的统一资源访问控制方法。它能减少授权管理的复杂性,降低管理开销和灵活地支持企业的安全策略,对企业的变化有很大的伸缩性。这里主要讨论基于角色的访问控制。
2.2 基于角色控制的优势
角色是用户和权限之间的数据中间层,一方面权限与角色关联,另一方面,用户作为相关角色的成员。通过对用户的分析发现,虽然系统中用户的数量在不断地增加,但因为系统的功能相对有限,就会产生某一类用户有着相同的权限,可以事先将这些权限打包起来作为一个集合,然后再将这个集合赋给用户。这个集合称之为“ 角色”(也称为组),以后在对用户进行权限设定的时候,不是为每个用户定义其对各个对象的操作权限,而是直接把一个它所属的角色赋予它,这样该用户就间接拥有了该角色的所有权限。并且因为角色可以同时赋给多个用户,以后要对该类用户进行权限修改时,只需更改一次角色的权限集合的内容,就可以完成修改,非常便捷。通过角色将用户和权限分开,一方面是可以防止非法用户登录系统,另一方面又可防止合法用户对系统资源的非法使用。
2.3 权限管理系统的核心对象模型
根据RBAC模型的权限设计思想,建立权限管理系统的核心对象模型。对象模型中包含的基本元素主要有:用户(Users)、角色(Role)、权限(Permission)、操作(Operator)。主要的关系有:分配角色权限PA(Permission Assignment)、分配用户角色UA(Users Assignment)描述如下[3]: ① 用户是权限的拥有者或主体,用户和权限实现分离,通过授权管理进行绑定;② 角色为权限分配的单位与载体;③ 权限为对某一数据对象的可操作权利,如在数据库中对数据对象的insert、delete、select、alter,存储过程的执行等,一项权限就是可以对某一特定数据对象进行某一特定操作的权利;④ 操作为完成资源的类别和访问策略之间的绑定;⑤分配角色权限PA为实现操作和角色之间的关联关系映射;⑥分配用户角色UA为实现用户和角色之间的关联关系映射。
3 权限管理系统的数据库设计
基于角色的权限管理系统主要研究用户、角色、权限、操作以及它们之间的关系, 相应的数据库表结构有用户信息表、角色信息表、权限信息表、角色权限对照表、树形结构节点表、角色与树形节点对照表等(列出的为主要字段)。数据库表结构及表间关系如下(见图1)。
4 应用功能权限管理的实现
4.1 用户授权
即给用户分配角色,把一个或若干个角色分配给指定用户即可,用户—角色的分配包括定义角色的层次关系。在用户与角色关系中, 用户是对受控数据对象(树型节点和页面功能项) 进行操作的主体, 角色对应企业中特定的职能岗位, 拥有处理某些功能项的许可。在整个系统中不存在无职责的用户[4],每一个用户按其职能和责任被赋予一定的角色,通过角色享有操作功能项的权限。
4.2 授权管理
其主要工作是角色—树形节点项的分配和角色-页面内部功能项的分配。
(1) 角色—树形节点项的分配及实现 确定登陆用户对应角色对哪些树形节点具有相应的操作权限,即在用户登陆系统之后,系统根据用户所属角色显示其相应的树形结构。在一个用户登陆时,首先用会话Session变量记录该用户的登陆帐号,即Session["userLoginCount"],因而,利用系统用户表中登陆帐号与用户角色一对一的关系,通过Basic_SystemUser表中的roleID在Basic_TreeViewRole表中查找等于roleID的所有节点的treeNodeId,然后通过在表Basic_TreeNode中查找所有相应的节点,通过以下算法显示出来,得到的树形结构与该用户角色所有权限相对应。
sqlstring="查找出与该登陆用户相应角色的所有节点”;//(string)Session["userLoginCount"]private void bindtvParentUserGroup(TreeNode tnTwo)//在总目录下...添加 "父级树结点"
{
DataSet ds = XF.Common.DBOperator.DBOperator.Instance().FillDataSet(查找出与该登陆用户相应角色的所有节点的SQL语句);
DataTable dtBF = ds.Tables[0];
DataRow[]RowList = dtBF.Select("fatherNodeId = '0'");//根节点的父节点ID为0
if (RowList.Length > 0)
{
for (int i = 0; i < RowList.Length;i++)
{
TreeNode tnTwoUG=new TreeNode();//定义控件中的节点
tnTwoUG.Text = RowList[i]["nodeName"].ToString();//nodeName 为节点名称
tnTwoUG.Value = RowList[i]["innerId"].ToString();//innerId 为节点的主键
tnTwoUG.Expanded = true;//节点自动展开
tnTwo.ChildNodes.Add(tnTwoUG);//总目录下添加子结点(父级树结点)
bindtvChildUserGroup(tnTwoUG, dtBF);//在父级树结点下添加"子结点"
}
}
}
private void bindtvChildUserGroup(TreeNode tnThre, DataTable dtChild)
{
DataRow[]RowList = dtChild.Select("fatherNodeId = '" + tnThre.Value+"'");
if (RowList.Length > 0)
{
for (int j = 0; j < RowList.Length; j++)
{
TreeNode tnThreUG = new TreeNode();//定义控件中的节点
tnThreUG.Text = RowList[j]["nodeName"].ToString();//nodeName 为节点名称
tnThreUG.Value = RowList[j]["innerId"].ToString();//innerId 为节点的主键
tnThreUG.Expanded = true;//节点自动展开
tnThre.ChildNodes.Add(tnThreUG);//父级树节点目录下添加子结点(子级树节点)
bindtvChildUserGroup(tnThreUG,dtChild);//实现递归
}
}
}
}
(2) 角色—页面内部功能项分配及实现 由于.net环境中,每一个控件都有自己唯一的控件编程名称(可以自己命名),利用这个特点,可以给每一个需要权限访问的控件采用统一的命名规则,例如:某一页面中的Button1控件命名为competency_PositionManage_Button1。然后,给每一个角色分配相应的控件访问权限或操作,并且存储在表Basic_RolePermission中。在一个用户登陆时,首先用会话Session变量记录该用户的登陆帐号,即Session["userLoginCount"],当用户点击树形结构中的叶子节点是,系统会根绝该用户的角色显示相应的具有操作权限的控件或和执行的操作。其原理是:利用系统用户表中登陆帐号与用户角色一对一的关系,通过Basic_SystemUser表中的roleID在Basic_RolePermission表中查找等于roleID的所有permissionId,通过permissionId得到permissionMark(权限标示或控件编程名称),与页面中查找所有控件,如果名称相同则有操作权限,反之,则没有相应的操作权限,将该控件的显示属性设定为false.主要程序如下:
//权限判断函数
public bool ValidateCompetency(string competencyMark)//传入的是单个权限的标识
{
………
if (页面中的控件标示(编程名称)不是以‘competnecy’开头) //不是为ture
retn = true;
else
{
传入的权限标示与数据库表中该角色的所有权限标示比较,如果为真,返回true;
}
return retn;
}
//页面加载时函数部分
for (int i = 0;i < this.Page.FindControl("form1").Controls.Count;i++)//循环页面中所有控件
{
string competency = this.Page.FindControl("form1").Controls[i].ID;
if (competency!=null && !ui.ValidateCompetency(competency))//传入控件id,判断是否有权限,如果控件不为空且权限验证返还false
this.Page.FindControl("form1").Controls[i].Visible =false;//若当前用户没有此权限,隐藏此控件
}
5 总结
采用该权限管理方案,把用户和功能通过角色连接起来,并且在此基础上把特定的用户和特定的页面及其页面内的功能操作范围很好地匹配起来,从而能很好的解决B/S模式下的权限管理问题,能够管理每一个页面。这种机制结构清晰,开发工作量小,管理效果比较明显。并且他已作为一个组件来实现,与MIS系统有相应的接口。本方案不仅仅适应于“煤矿安全隐患识别、预警与整改控制信息平台”系统,同样适用于B/S模式下的其他管理信息系统。
参考文献:
[1] 高正宪,李中学.Web 环境下基于角色的访问控制策略及实现[J].计算机工程,2004,30(8):133-135.
[2] 张荣博,李胜宇,李席广,等.基于角色访问控制的研究与应用[J].沈阳航空工业学院,2007,24(1):41-43.
[3] 裴辉东,梁云风.基于RBAC模型的权限管理系统的设计和实现[EB/OL].[2008-9-28]http:∥www.amd ong.cn/yyal/2007 03 145 asp.
[4] 刘燕,李慧强,胡义刚.技术信息系统中基于角色的权限管理系统[J].机床与液压,2004(10):222-226.
(责任编辑:李 丽)