建 立 应 用 软 件 注 册 安 全 机 制

2008-04-09 04:17:39来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

30d7 p>----软件的安全性是个永恒的话题,一直困扰着人们, 程序员们常常因此熬夜。Novell公司的网络操作系统NetWare以其完善可靠的安全管理机 制著称,为实现用户登录的安全性和防止非法入侵者闯入,系统提供了几种有效的限制措 施和检测功能。本文讨论如何建立完善的软件注册安全机制,有效地管理用户登录,为应用 软件提供可靠的保护,并在Delphi3.0下实现。

----Delphi作为一个优秀的编程工具,功能极其强大, 令开发周期大大缩短,生成的代码运行速度快,使得Windows软件设计成为一种乐趣。基本 思路是:建立Paradox格式的用户帐户表Users.DB,并加密保护,由管理员维护。预先在此表 中登记并有注册权限的用户,可持本人有效口令登录进入系统。

----实现步骤如下:

----1.在应用软件主目录(假设为C:\Register)下 创建两个子目录,分别命名为Login和Data。

----2.从Delphi的Tools菜单中启动DatabaseDesktop, 并选择Tools/AliasManager…创建一个新别名。方法是:在AliasManager对话框中点New, 给出新别名UserInfo,并指向C:\Register\Data目录,按KeepNew、OK等按钮保存新别名。

----3.利用DatabaseDesktop创建Paradox5.0for Windows数据表Users.DB,结构见表1。事实上,对于商业软件还需要更多的域。

表1表Users.DB的结构
域名	类型	大小	关键字	说明
Name	A	16	*	用户名
Password	A	16	*	注册口令
Fullname	A	32		用户全名
Group	I			用户组号
Enabled	L			注册允许

----4.设定Name,Group和Enabled为非空域(Required Field),Group的最小值为0,最大值为3,默认值为3,Enabled的默认值为True。用户组0为 系统管理员,可进行几乎任何操作;用户组1为软件操作人员,可进行除用户帐户管理以外 的操作,包括建立和删除数据;用户组2为普通用户,可使用系统资源,无修改权限,而用户 组3仅可浏览系统有限信息。

----5.用口令"UserPassword"保护Users.DB表,存 于Data目录下。利用DatabaseDesktop向表中输入若干样本用户(见表2),然后关闭Database Desktop。

表2表Users.DB的样本用户
Name	Password	Fullname	Group	Enabled
Supervisor	AAAAAA	SuperUser	0	True
   ector	BBBBBB	DirectorUser	1	True
Guest			3	True
User1	CCCCCC	GeneralUser1	1	False
User1	DDDDDD	GeneralUser1	2	True
User2	EEEEEE	GeneralUser2	3	True

----表2显示,允许同一用户以不同身份(用户组)登录 进入系统,享有不同的权限。如用户User1,以不同密码登记,分属用户组1和2。

----6.返回DelphiIDE,新建项目Register.dpr并 存入C:\Register目录,主窗体单元命名为Main.pas。用户注册成功后,方能启动主窗体进 入系统。本系统仅显示用户信息及登录的日期和时间以表示注册成功(见图5),并不做其它 任何事情,这里便是读者应用系统的接口。为此,在主窗体上放入一个TGroupBox组件,TLabel 和TEdit组件各五个。将所有TEdit的Text属性清空,ReadOnly属性值设为True,窗体和组件 其余属性按表3设置。

----7.创建主窗体的OnActivate事件处理程序,登 录成功并激活主窗体时执行,显示用户信息、登录日期和时间。过程如下:

procedureTMainForm.FormActivate(Sender:TObject);
begin
ifTime<=StrToTime(12:00:00)then
Caption:=上午好,您已成功登录!
else
Caption:=下午好,您已成功登录!;
//显示登录用户信息、登录日期和时间
NameEdit.Text:=LoginUser.UserName;
FullNameEdit.Text:=LoginUser.UserFullName;
GroupEdit.Text:=IntToStr(LoginUser.UserGroup);
DisplayDateEdit.Text:=DateToStr(Date);
DisplayTimeEdit.Text:=TimeToStr(Time);
end;

表3主窗体中组件属性设置
组件	属性	设置
Form1	Caption	
	Name	MainForm
	Position	poScreenCenter
GroupBox1	Caption	用户信息
Label1	Caption	用户名称:
Label2	Caption	用户全名:
Label3	Caption	用户组号:
Label4	Caption	登录日期:
Label5	Caption	登录时间:
Edit1	Name	NameEdit
Edit2	Name	FullnameEdit
Edit3	Name	GroupEdit
Edit4	Name	DisplayDateEdit
Edit5	Name	DisplayTimeEdit

----8.数据模板。选择File/NewDataModule建立 数据模板LogDataModule,放入一个Ttable组件,如图1。属性按表4设置,命名其单元为MD.pas, 存入Login目录。

表4数据模板中组件属性设置
组件	属性	设置
Table1	DatabaseName	UserInfo
	Name	UsersTable
	TableName	Users.DB

----9.创建注册窗体。选择File/NewForm创建一个 新窗体,并加入组件TLabel、TEdit和TbitBtn各两个。窗体和组件属性按表5设置,命名其单 元为Login.pas,存于Login目录。

表5注册窗体中组件属性设置
组件	属性	设置
Form2	ActiveControl	UserNameEdit
	Caption	请注册
	Name	LoginDialogForm
	Position	poScreenCenter
Label1	Caption	用户:
Label2	Caption	密码:
Edit1	Name	LoginNameEdit
	Text	
Edit2	Name	PasswordEdit
	PasswordChar	*
	Text	
BitBtn1	Caption	注册(&L)
	Enabled	False
	Kind	bkOK
	Name	LoginBitBtn
BitBtn2	Caption	取消(&C)
	Enabled	True
	Kind	bkCancel
	Name	CancelBitBtn

----10.选择File/New命令,从NewItems的New页中 选择Unit项建一个无窗体单元Addition.pas存入Login目录,在其interface段输入下列语 句:

usesClasses,Forms,Sysutils;
type
TApplicationUser=class(TComponent)
private
FUserName:string;
FFullName:string;
FUserGroup:Integer;
public
propertyUserName:stringread
FUserNamewriteFUserName;
propertyUserFullName:stringread
FFullNamewriteFFullName;
propertyUserGroup:Integerread
FUserGroupwriteFUserGroup;
end;
var
LoginUser:TApplicationUser;

			   
			   

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:无标题栏窗口程序设计中鼠标拖动技巧

下一篇:Delphi中的INI文件编程