我的应用程序当前正在使用firebird安全性来登录我的应用程序的任何用户。
我们正在使用Delphi7和Firebird 2.1。
现在我们需要改变这一点,我们需要控制自己的访问权限。
我们正在考虑从数据库中检索所有用户密码(作为转换例程)并将密码保存在我们的表格中....
可以这样做吗?
我正在尝试使用delphi组件TIBSecurityService,但没有成功。
看看:
var
i: integer;
l: TStrings;
pwd: string;
begin
IBSecurityService1.Attach;
IBSecurityService1.DisplayUsers;
l := TStringList.Create;
try
for i := 0 to IBSecurityService1.UserInfoCount-1 do
l.add(IBSecurityService1.UserInfo[i].UserName);
while l.Count > 0 do
try
IBSecurityService1.DisplayUser(l[0]);
pwd := IBSecurityService1.Password;
// pwd = ''
finally
l.Delete(0);
end;
finally
l.Free;
end;
end;
感谢您的帮助!
答案 0 :(得分:4)
Firebird中的密码被哈希处理,因此您无法恢复它们。
答案 1 :(得分:4)
据我所知,TIBSecurityService适用于Interbase 6(请参阅Embarcadero's wiki上的条目)。我不确定该组件是否仍适用于Firebird 2.1,因为最初的Firebird是该版本的分支。
说这个,你可以不检索原始密码。 Firebird中的密码使用Firebird FAQ中所述的单向加密算法进行加密。所以,如果这是你的意图那么它将无法运作。
您可以尝试做的是升级包含用户信息的security2.FDB数据库。您可以通过在旧的Firebird服务器上备份该数据库来执行此操作,并在新的Firebird服务器上将其还原。检查this link以了解要遵循的步骤。
HTH
答案 2 :(得分:2)
在任何体面的应用程序中,密码都不会以加密或纯文本形式存储。
通过计算密码的哈希来存储它们。 Hasing应该是不可逆的,因为有几个弱哈希算法,我怀疑在没有严重破解的情况下恢复是可能的。