我想让用户自己设置密码及用户名...(Access)急!急!急!(50分)

  • 主题发起人 主题发起人 llk9881116
  • 开始时间 开始时间
L

llk9881116

Unregistered / Unconfirmed
GUEST, unregistred user!
我想让用户自己设置密码及用户名,且当用户名或密码填写出现error或没填写时,只可以
进入查询浏览,不能修改,请问该怎么写?
 
最简单的,给用户开个默认的名字和密码,缺省的,到时候提供一个统一的登陆框,
然后分别给不同的用户授权,却省的用户授权为只有select权限
 
可以假设一个guest的值为空,然后给它空密码
formcreate(sender.....
var guest:string;
begin
guest:=getpassword(edit_user.text);
with yourtable do
begin
if not active then active:=true;
first;
disablecontrol;
if findkey(guest) then
begin
if guest=fieldbyname('password').asstring then
......modalresult:=1;
else
begin
showmessage('error,use as guest,only search!');
guest:='';
modalresult:=0;
button_modify.enabled:=false;
end
...哎呀,懒得写了,差不多了吧!




 
To xiaocai,zhao0707:
你们是把用户名和密码都记在了Access数据库中,但这样并没有对Access数据库进行加密
用Access还是能够轻松的打开这个数据库
我也正期待这个问题的解答,能不能给个更有建设性的回答
 
Adoconnection连接数据库时用Open(username,password)来打开。
如果打开错误,则记下来密码错误。再用正确的用户密码打开。把可以修改数据的部分
控件置False。如Dbgrid设置readonly等。
如果打开正确则继续进行。
ex:
ErrorUser := False; //全局变量,记录是否为正确用户密码
try
Adoconnection.Open(username,password);
except
showmessage('error username or password, so you have only navigate right!');
ErrorUser := True;
Adoconnection.open('Leo','aaa'); //用你设置的正确的用户密码打开,此用户权限为读取。
end;
最好在显示其他使用其他From前判断ErrorUser值,控制一些控件属性。
如在Form的Create。
if ErrorUser then
begin
DBGrid1.readonly := True;
ButtonAddRecord.Enable := False;
.............
end;
 
很简单,直接对ACCESS的密码进行再次加密。

如:在ACCESS中有如下字段。
ccc(用户名) 1234(密码)
那么在登陆的时候用户名可以不用加密,只要对1234进行加密,比如说对1234进行一个
运算,比如移位运算,获加减运算,就是说,那个1234本不是密码,只是加密过后的密码,
而密匙就是那个运算方法,本来这里设计到安全问题,但是我想你用的是ACCESS,所以这一
方面应该也考虑的不多!
不知道你是否理解!
 
To GanQuan,bingjian :
你们的方法不错,但是密码还是放在Access数据库中呀,至于密匙运算,我不大懂,可否讲的
详细点,是填用户名后,通过算法将用户名变为密码给用户,还是运算用户自己填写的密码?如果
是后者,那用户以后登录还是要用自己填写的密码,和以前有什么区别?

望大家关注.....[:)]


 
当然是后者,,和以前的区别就是你不能通过打开ACCESS看到的密码来登陆了,因为ACCESS存储的密码是
已经经过密钥加密后的了,是用户输自定密码后,经过密钥加密的了
 
to Shepherd
如果这样的话,我看可以用文件加密的控件把数据库文件进行加密;
在用户登陆后进行解密使用;

to llk9881116
如果要这样的话,要结合用户权限管理了!
对于密视,也就是一个字符串(也就是用户密码)的加密和解密;
--这是一个加解密的算法:
type
TDynByteArray = array of byte;

const
SeedA = 5678; /// 常量,你可以修改
SeedB = 5432; /// 常量,你可以修改

/// 对数组加密
function Crypt(const s: TDynByteArray; Key: Word; const bEncrypt: boolean = true): TDynByteArray; overload;
var
i : integer;
begin
SetLength(Result, Length(s));
for i := Low(s) to High(s) do
begin
Result := s xor (key shr 8);
if bEncrypt then
Key := (Result + key) * SeedA + SeedB
else
Key := (s + Key) * SeedA + SeedB;
end;
end;

/// 字符串
function Crypt(const s: string; Key: Word; const bEncrypt: boolean = True): string; overload;
var
i : integer;
ps, pr : ^byte;
begin
SetLength(Result, Length(s));
ps := @s[1];
pr := @Result[1];
for i := 1 to length(s) do
begin
pr^ := ps^ xor (Key shr 8);
if bEncrypt then
Key := (pr^ + Key) * SeedA + SeedB
else
Key := (ps^ + Key) * SeedA + SeedB;
pr := pointer(integer(pr) + 1);
ps := pointer(integer(ps) + 1);
end
end;

/// 也可以对记录进行加密,只要把TResultData改成你的记录类型即可!!!!!!
function Crypt(const s: TResultData; Key: Word; const bEncrypt: boolean = True): TResultData; overload;
var
i : integer;
ps, pr : ^byte;
begin
ps := @s;
pr := @Result;
for i := 1 to SizeOf(s) do
begin
pr^ := ps^ xor (Key shr 8);
if bEncrypt then
Key := (pr^ + Key) * SeedA + SeedB
else
Key := (ps^ + Key) * SeedA + SeedB;
pr := pointer(integer(pr) + 1);
ps := pointer(integer(ps) + 1);
end;
end;
***************************
function cryptstr(const s:string; stype: dword):string;
var
i: integer;
fkey: integer;
begin
result:='';
case stype of
0:
begin
randomize;
fkey := random($ff);
for i:=1 to length(s) do
result := result+chr( ord(s) xor i xor fkey);
result := result + char(fkey);
end;
1:
begin
fkey := ord(s[length(s)]);
for i:=1 to length(s) - 1 do
result := result+chr( ord(s) xor i xor fkey);
end;
end;
 
后退
顶部