论文部分内容阅读
摘 要:基于角色的访问控制是一种通常用于指派用户适当角色的模型,它针对企业或组织的策略,授权用户在管理信息系统(MIS)的使用权限。本文描述用户(User)-角色(Role)-权限(Permission)在管理信息系统权限管理的要素,讲解关于基于角色的访问控制(RBAC)模型,并以C#.NET代码为实例,提出实现模型的方法。
关键词:RBAC 角色 权限 C#.NET
中图分类号:G203 文献标识码:B 文章编号:1673-8454(2009)19-0042-02
一、RBAC基本概念和模型
基于角色的访问控制(Role-Based Access Control,简称RBAC)已经成为解决管理信息系统的统一资源访问控制的有效方法,它替代了传统的自主型访问控制和强制访问控制方法。在RBAC中,权限与角色,角色与用户之间通过联结的关系,从而产生用户的权限。这极大地简化了系统的管理权限。RBAC两大特征是:减小授权管理的复杂性,降低管理开销;灵活地支持企业或组织的安全策略,并对系统的变化有很大的伸缩性。
信息系统中的用户、角色、权限及系统资源的基本概念如下:
(1)用户(User):与角色相关,用户要拥有对某种资源的权限,必须通过角色去关联。
(2)角色(Role):可以操作某些资源的权限集合。通过给用户赋予不同的角色,对成员的多职能进行表达,提供约束用户不同权限范围的依据。角色作为用户与权限的代理层,定义权限和用户的关系,所有的授权应该给予角色而不是直接给用户。
(3)权限(Permission):是指与资源相联系的权限。权限是绑定在特定的资源实例上的,比如在内容管理系统(CMS),有“文章的发布权限”,这就表明,该权限是一个发布权限,而且是针对文章这种资源的一种发布权限。权限包括系统定义权限和用户自定义权限。用户自定义权限之间可以指定排斥和包含关系(如:发布、修改、删除、管理四个权限,管理权限包含前三种权限)。
(4)资源(Resource):就是信息系统的资源,比如新闻、文档等各种可以被提供给用户访问的对象。系统资源是一个树形的结构,任何一个节点都是一个资源,一个资源节点可以与若干指定权限类别相关,可定义是否将其权限应用于子节点。
(7)用户-角色-权限 (View_U_R_P)视图:创建视图是为了提高表之间的联结查询效率,视图里的一条记录反映了一个用户所对应的一个权限,当用户的角色发生改变时,他所对应的权限也发生改变。
创建视图View_U_R_P的SQL代码:
CREATE VIEW View_R_U_P
AS
SELECTrole.pkid, role.name, user_role.user_pkid, role_ permission.role_pkid, permission.name AS permission_name, role.name AS role_name, permission.resource_pkid, permission.pkid AS permission_pkid, role_permission.permission_range
FROMrole INNER JOIN role_permission ON role.pkid = role_permission.role_pkid INNER JOIN
user_role ON role.pkid=user_role.role_pkid INNER JOIN
permission ON role_permission.permission_pkid = permission.pkid
三、利用C#.NET实现信息管理系统的权限控制
通过对RBAC的模型分析和数据表定义,我们容易得到对用户操作权限进行判断的方法。用户在对信息系统的某个功能模块操作时,首先获取该功能模块所对应的权限编号(permission_pkid)和用户登录系统时创建会话(Session)的user_pkid,利用这两个值判断用户是否有权限操作。下面我们以判断用户是否有权限删除新闻为实例,利用C#.NET实现一个简单的权限控制。在用户点击“删除新闻”按钮时,我们触发服务端控件的事件(Event):
protected void ButtonDelete_Click(object sender, EventArgs e)
{
//判断是否有删除新闻权限
String permission_pkid = "10";//假设删除新闻所对应的permission_pkid为10
String user_pkid = Session[“user_pkid”].ToString;//获取用户登录后的Session中的user_pkid值
bool have_permission = Sql.PubClass.CheckSQL("select * from View_U_R_P where user_pkid=" user_pkid " and permission_pkid=" permission _pkid);
if (have_permission == false)
{
Response.Write(“<script language=javascript>alert(‘对不起,你没有删除新闻的权限!’); </script>”);//弹出提示没有权限的对话框
}else
{
//删除新闻操作,代码略去。
}
}
在以上代码中,CheckSQL是数据库操作类SQL.PubClass中的一个成员函数,通过数据访问的封装,很大程度上简化了信息系统编程代码。函数CheckSQL返回的是布尔值(boolean),通过传入sql查询语句,判断是否有
获取到值,如果有则返回值为true,否则为 false。
四、结束语
本文就RBAC的模型进行分析,提出简单实现模型控制的方法。又因权限设计必须考虑多方面的要求,比如角色的继承、权限的互斥等,所以在模型中引入了限制(Constraints),实现一套完整的权限设计方法。
参考文献:
[1]Sandhu R S, Coyne E J, Feinstein H L, et al. Role-based access control models[J].IEEE Computer,1996,29(2):38-47.
[2]Dongwan Shin,Gail-Joon Ahn: Role-based privilege and trust management. Number 6,November 2005.
[3]贾爱华,陈定方.NET平台下基于RBAC模型的用户权限控制[J].湖北工业大学学报,2008(6).
(编辑:金冉)
关键词:RBAC 角色 权限 C#.NET
中图分类号:G203 文献标识码:B 文章编号:1673-8454(2009)19-0042-02
一、RBAC基本概念和模型
基于角色的访问控制(Role-Based Access Control,简称RBAC)已经成为解决管理信息系统的统一资源访问控制的有效方法,它替代了传统的自主型访问控制和强制访问控制方法。在RBAC中,权限与角色,角色与用户之间通过联结的关系,从而产生用户的权限。这极大地简化了系统的管理权限。RBAC两大特征是:减小授权管理的复杂性,降低管理开销;灵活地支持企业或组织的安全策略,并对系统的变化有很大的伸缩性。
信息系统中的用户、角色、权限及系统资源的基本概念如下:
(1)用户(User):与角色相关,用户要拥有对某种资源的权限,必须通过角色去关联。
(2)角色(Role):可以操作某些资源的权限集合。通过给用户赋予不同的角色,对成员的多职能进行表达,提供约束用户不同权限范围的依据。角色作为用户与权限的代理层,定义权限和用户的关系,所有的授权应该给予角色而不是直接给用户。
(3)权限(Permission):是指与资源相联系的权限。权限是绑定在特定的资源实例上的,比如在内容管理系统(CMS),有“文章的发布权限”,这就表明,该权限是一个发布权限,而且是针对文章这种资源的一种发布权限。权限包括系统定义权限和用户自定义权限。用户自定义权限之间可以指定排斥和包含关系(如:发布、修改、删除、管理四个权限,管理权限包含前三种权限)。
(4)资源(Resource):就是信息系统的资源,比如新闻、文档等各种可以被提供给用户访问的对象。系统资源是一个树形的结构,任何一个节点都是一个资源,一个资源节点可以与若干指定权限类别相关,可定义是否将其权限应用于子节点。
(7)用户-角色-权限 (View_U_R_P)视图:创建视图是为了提高表之间的联结查询效率,视图里的一条记录反映了一个用户所对应的一个权限,当用户的角色发生改变时,他所对应的权限也发生改变。
创建视图View_U_R_P的SQL代码:
CREATE VIEW View_R_U_P
AS
SELECTrole.pkid, role.name, user_role.user_pkid, role_ permission.role_pkid, permission.name AS permission_name, role.name AS role_name, permission.resource_pkid, permission.pkid AS permission_pkid, role_permission.permission_range
FROMrole INNER JOIN role_permission ON role.pkid = role_permission.role_pkid INNER JOIN
user_role ON role.pkid=user_role.role_pkid INNER JOIN
permission ON role_permission.permission_pkid = permission.pkid
三、利用C#.NET实现信息管理系统的权限控制
通过对RBAC的模型分析和数据表定义,我们容易得到对用户操作权限进行判断的方法。用户在对信息系统的某个功能模块操作时,首先获取该功能模块所对应的权限编号(permission_pkid)和用户登录系统时创建会话(Session)的user_pkid,利用这两个值判断用户是否有权限操作。下面我们以判断用户是否有权限删除新闻为实例,利用C#.NET实现一个简单的权限控制。在用户点击“删除新闻”按钮时,我们触发服务端控件的事件(Event):
protected void ButtonDelete_Click(object sender, EventArgs e)
{
//判断是否有删除新闻权限
String permission_pkid = "10";//假设删除新闻所对应的permission_pkid为10
String user_pkid = Session[“user_pkid”].ToString;//获取用户登录后的Session中的user_pkid值
bool have_permission = Sql.PubClass.CheckSQL("select * from View_U_R_P where user_pkid=" user_pkid " and permission_pkid=" permission _pkid);
if (have_permission == false)
{
Response.Write(“<script language=javascript>alert(‘对不起,你没有删除新闻的权限!’); </script>”);//弹出提示没有权限的对话框
}else
{
//删除新闻操作,代码略去。
}
}
在以上代码中,CheckSQL是数据库操作类SQL.PubClass中的一个成员函数,通过数据访问的封装,很大程度上简化了信息系统编程代码。函数CheckSQL返回的是布尔值(boolean),通过传入sql查询语句,判断是否有
获取到值,如果有则返回值为true,否则为 false。
四、结束语
本文就RBAC的模型进行分析,提出简单实现模型控制的方法。又因权限设计必须考虑多方面的要求,比如角色的继承、权限的互斥等,所以在模型中引入了限制(Constraints),实现一套完整的权限设计方法。
参考文献:
[1]Sandhu R S, Coyne E J, Feinstein H L, et al. Role-based access control models[J].IEEE Computer,1996,29(2):38-47.
[2]Dongwan Shin,Gail-Joon Ahn: Role-based privilege and trust management. Number 6,November 2005.
[3]贾爱华,陈定方.NET平台下基于RBAC模型的用户权限控制[J].湖北工业大学学报,2008(6).
(编辑:金冉)