1.引言
信息系统实现过程中经常遇到这样的情况:一个信息系统有很多组、多个的用户,而且各组用户具有的权限、所使用的数据都不相同。比如,一个学籍管理信息系统中,如果要实现学生学习成绩的发布与查询的话,应该针对不同的学生提供个人的成绩,然而由于学生人数很多,许多系统在实现成绩查询时并不针对某一个学生进行,而是输出所有的学生的成绩。在成绩查询这个例子中这个问题体现的不是很明显,但如果考虑学生在网上录入自己的选课情况的话,这种方式就会出现一些问题。比如,一些人可能恶意修改他人信息。因此需要对这一情况进行研究。
2.多用户的安全验证
为实现用户的验证,这种查询/编辑需要验证客户是否为合理的用户,需要在客户端输入用户名称以及相应的密码,然后在数据库端进行验证。对于通过身份验证的用户返回其所要求的数据。实现用户查询自己信息的方式通常情况下是在客户端的数据连接组件中进行限定,如果客户端为学生,他要查询相应的课程成绩,则在客户端完成课程成绩的SQL语句的装配,自动生成类似“select * from 课程成绩 where 学号=’Xuehao’”(其中Xuehao是客户端登录或者获取数据时提供的数据)
实现用户的验证,对于大型数据库来讲是连接数据库获取数据必须的一个步骤。传统方式是对不同的用户建立不同的用户帐号,并为他们分配适当的权限。而在多用户类型、多用户量的情况下,针对每一个用户建立一个帐号将涉及到很大的工作量:包括登录名称,数据库用户的建立,权限的分配,因此通常的方式是,利用数据库所提供的角色的概念,针对不同的用户类型建立不同的角色,将不同的用户赋予相应的角色,从而减少用户的权限分配管理,但这样仍然不能减少用户管理的工作量。对于学生成绩管理系统来讲,每年都有新生入学,需要创建数据库用户,同时又有学生毕业需要删除他们相应的数据库用户。这样维护数据库的工作,虽然可以通过计算机程序进行,但是用户管理的操作相对于表格的数据操作,费时费力。
针对这种情况,通常的办法是将用户不真正建立数据库用户,而是建立表格“用户表”,在表中存储其所属的角色,即相应的权限。这样对用户的维护就转变成对表格数据的维护,即方便程序的实现,又给用户以熟悉感。当然这样的管理需要结合存储过程来实现。
为实现用户的验证,这种查询/编辑需要验证客户是否为合理的用户,需要在客户端输入用户名称以及相应的密码,然后在数据库端进行验证。对于通过身份验证的用户返回其所要求的数据。实现用户查询自己信息的方式通常情况下是在客户端的数据连接组件中进行限定,如果客户端为学生,他要查询相应的课程成绩,则在客户端完成课程成绩的SQL语句的装配,自动生成类似“select * from 课程成绩 where 学号=’Xuehao’”(其中Xuehao是客户端登录或者获取数据时提供的数据)
实现用户的验证,对于大型数据库来讲是连接数据库获取数据必须的一个步骤。传统方式是对不同的用户建立不同的用户帐号,并为他们分配适当的权限。而在多用户类型、多用户量的情况下,针对每一个用户建立一个帐号将涉及到很大的工作量:包括登录名称,数据库用户的建立,权限的分配,因此通常的方式是,利用数据库所提供的角色的概念,针对不同的用户类型建立不同的角色,将不同的用户赋予相应的角色,从而减少用户的权限分配管理,但这样仍然不能减少用户管理的工作量。对于学生成绩管理系统来讲,每年都有新生入学,需要创建数据库用户,同时又有学生毕业需要删除他们相应的数据库用户。这样维护数据库的工作,虽然可以通过计算机程序进行,但是用户管理的操作相对于表格的数据操作,费时费力。
针对这种情况,通常的办法是将用户不真正建立数据库用户,而是建立表格“用户表”,在表中存储其所属的角色,即相应的权限。这样对用户的维护就转变成对表格数据的维护,即方便程序的实现,又给用户以熟悉感。当然这样的管理需要结合存储过程来实现。
但是这种将限制语句放在客户端来进行的方法有如下的不足:如果一个知道用户名称与密码的用户,构造了一个客户端,而在这个客户端中,他并不限制了查询修改数据的范围,这样他就可以对可以访问的表格的所有数据进行操作,而不再仅仅是他所被赋予的范围。
因此,更好的方式是将数据的限制放在数据库上进行,这样,即使是获取了一个用户名称、密码的用户也仅仅能对原用户相关的数据进行查询、修改,从而在一定程度上提高了数据的安全性。
来源:博远电子(软件定制),如涉及版权问题请与我们联系。
TAG
软件定制,软件开发,瀚森HANSEN,辽宁,沈阳,抚顺