(急)关于数据库口令验证的问题(130分)

  • 主题发起人 主题发起人 gcys
  • 开始时间 开始时间
G

gcys

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟在做一个管理程序,数据库为mssql。由于安全性比较重要,所以启动
程序时必须进行口令验证。并且输入的用户名在程序中将用到。
我现在将Tdatabase控件的loginprompt属性设为 true,启动后它会自动弹出
登陆对话框。很方便,但是口令一旦输错,程序将非正常退出。
(出于安全性考虑,故不用table来保存用户名及口令)
请大虾们点化。
 
设计时把 database1.active 设为关闭状态, 在你的主FORM的create中,
err := 0;
while true do
try
database1.open
break;
except
inc(err);
if err = 3 then exit;
^^^^这个不知是否正确!!!
showmessage('用户名或口令出错, 无法登录数据库');
end;
end;
 
你可以自己做一个口令程序,将口令及用户名加密后放在注册表里.我有现成的程序,
你想要的话请先给我加分,我就发给你.
 
如果用MSSQL,我强烈推荐使用InterGrated安全模式,程序里别管什么口令,呵呵
直接用DATABASE连接,USER=‘’PASS=‘’就可以。
wuyi的方法基本可以,不过还应该加点什么吧?//seasky说的,别怪我,呵呵
try

except
如果是其它错误呢?//不过我回答许多问题也那么偷懒,呵呵,至少应该加个ON XXX
什么的,详细见那个ODBC EXPRESS使用的问题。
 
repeat //Until RepeatExit=True
try
Database.Open;
RepeatExit:=True;
except
on EDatabaseError do
if MessageDlg('不能连接到数据库!', mtError,[mbRetry, mbAbort], 0) <> mrRetry then
RepeatExit:=True;
on EAbort do
if MessageDlg('数据库中没有您的用户信息!', mtError,[mbRetry, mbAbort], 0) <> mrRetry then
RepeatExit:=True;
end;
until RepeatExit;
 
CJ:InterGrated安全模式?怎么设置?

由于程序中将用到用户名(必需)。请问如何取得Tdatabase登陆对话框中的用户名。
 
使用一个输入用户名和密码的对话框,然后

islogin:=false;
i:=0;
repeat
begin
frmgetuserandpass.show;
struname:=frmgetuserandpass.edtusername.text;
strpass:=frmgetuserandpass.edtpassword.text;
database1.params.clear;
database1.params.add('USER NAME='+struname);
database1.params.add('PASSWORD='+strpass);
inc(i);
try
database1.active:=true;
isLogin:=true;
i:=3;
except
on EDatabaseError do
if MessageDlg('不能连接到数据库!', mtError,[mbRetry, mbAbort], 0) <> mrRetry then
i:=3;
on EAbort do
if MessageDlg('数据库中没有您的用户信息!', mtError,[mbRetry, mbAbort], 0) <> mrRetry then
i:=3;
end;
until i=3;
 
谢谢!接受答案。
请斑竹加分.
 
建议不使用LoginPrompt:=True;
可以自己做一个登录界面,然后再改写Params。
使用
try
DataBase.Open;
except
//显示登录错误
//退出程序
end;

 
To gcys : 既然接受答案, 你自己快分呀.
 
多人接受答案了。
 
后退
顶部