レジストリでアプリケーションにパスワードをつける


ほとんどのアプリケーションシステムにはそれなりの権限管理機能があります。大規模なマルチユーザアプリケーションシステムについては、通常、権限設定をデータベースに保存します。しかし、小型の単一ユーザアプリケーションシステムと非データベースアプリケーションシステムについては、権限設定をデータベースに保存する必要はありませんが、ファイルで保存するのは不便で安全ではありません。実際には、Windowsレジストリの特徴を活用して、アプリケーションシステムにユーザー名とパスワードを設定することができます。この方法はプログラミングが簡単であるだけでなく、安全性も高いです。このルーチンは、Windows 98、Delphi 4環境でデバッグされた例を示します。設計の流れは:初めて使うかどうかを先に判断して、初めて使うなら、新しいユーザー名とパスワードを設定して、システムはユーザー名とパスワードを保存します。初めてでない場合は、ユーザー名とパスワードを入力してログインすることができます。Delphi開発環境において、新しいプロジェクトProject 1を作成し、Project 1にフォームForm 1を追加します。Form 1に2つのボタンを追加します。一つは確定として、もう一つはキャンセルです。Form 1にTextボックスEditUserとEditPassを2つ追加して、それぞれユーザー名とパスワードの入力ボックスです。フォームレベルのグローバル変数RegF:Tregistryを指定します。インタフェースのUsesにRegistryを加えます。関数Wsz_を追加しますIfFirstは初めて使うかどうかを判断します。増加過程Wsz_SaveUse、ユーザー名とパスワードを保存します。関数Wsz_を追加しますCheckUserは、ユーザー名とパスワードが正しいかどうかを判断する。そして、Form 1のFormShowイベントと確定ボタンイベントでは、それぞれこの3つの関数とプロセスを呼び出して、設計要求に達する。function Wsz_を初めて使うかどうかを判断します。If First:BooleanvarsUser:stringsPass:stringbegirlesult:=false;RegF:=Tregistry.reat;RegF.RootKey:=HKEY_LOCAL_MACHINE;RegF.OpenKey(「SOFTWARE\MicroSoft\whh 726」、TRUE);sUser:=RegF.ReadString(「user」);sPass:=RegF.ReadString(「pass」);if((length(sUser)<=0)and(length(sPass)<=0)thenreult)=true;RegF.Freeend;//ユーザー名とパスワードが正しいかどうかを判断するWsz_CheckUser(MyUser:string)MyPass:string):Boolean;varsUser:stringsPass:stringbegirlesult:=false;RegF:=Tregistry.reat;RegF.RootKey:=HKEY_LOCAL_MACHINE;RegF.OpenKey(「SOFTWARE\MicroSoft\whh 726」、TRUE);sUser:=RegF.ReadString(「user」);sPass:=RegF.ReadString(「pass」);if(sUser=MyUser)and(sPass=MyPass)thenreult=true;RegF.Freeend;//ユーザ名とパスワードを保存します。SaveUser(MyUser:string)MyPass:string)BegineRegF:=Tregistry.reat;RegF.RootKey:=HKEY_LOCAL_MACHINE;RegF.OpenKey(「SOFTWARE\MicroSoft\whh 726」、TRUE);RegF.WriteString(「user」,MyUser);RegF.WriteString(「pass」、MyPass);RegF.Freeend;//キャンセルボタンイベントprocedure TWs zLogin Form.BitBtnCloose Click(Sender:Tobject);begin Close;end;//ボタンイベントのprocedure TWs zLogin Form.BitBtnYesClickを確定します。varsuser:stringspass:string;beginsser==trim(editouser.text);spass:=trim(edit pass.text)if(length(suser)<=0)or(length(spass)<=0)thenbankeginappration.MessageBox(ユーザ名とパスワードは全部入力しなければなりません!」、「システムヒント"OK+MB_ICON INFOREMATION)ediituser.Set Focus;exitend;if Wsz_IfFirst thenbankegin/は、最初にログインしたユーザ名とパスワードifアプリ.MessageBoxを処理します。今システムに入りますか?システムヒント"OKCANCEL+MB_ICONQUESSTION)=IDOK thenbegin/保存Wsz_SaveUser(suser、spass);endelse begineed ituser.Set Focus;exitend;end elsebegif not Wsz_CheckUser(suser,spass)thenbergingplication.MessageBox(すみません、ユーザー名とパスワードの入力が間違っています。システムヒント"OK+MB_ICON INFOREMATION)ediituser.setfocus;exitend;end;//グローバル変数GB_Wsz_User:=suserGB_Wsz_PASS:=spassClose;end;//フォームのShowイベントprocedure TWs zLogin FormShow(Sender:Tobject);ビギフWsz_IfFirst thenbankeginappration.MessageBox(このソフトウェアを使うのは初めてです。ユーザ名とパスワードを自由に入力できます。システムヒント"OK+MB_ICON INFOREMATION)end;end;