我的应用程序目前使用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;
多谢帮忙!
4条答案
按热度按时间scyqe7ek1#
火鸟中的密码是散列的,因此您无法恢复它们。
u2nhd7ah2#
据我所知,TIBSecurityService是针对Interbase 6的(请参见它在Embarcadero's wiki上的条目)。我不确定该组件是否仍然适用于Firebird 2.1,因为最初的Firebird是该版本的一个分支。
这样说,你就不能****恢复原来的密码了。Firebird中的密码是使用Firebird FAQ中规定的单向加密算法加密的。所以如果这是你想要的,那么它就不会起作用。
您可以尝试升级保存用户信息的security2.FDB数据库。您可以通过在旧的Firebird服务器上备份该数据库,然后在新的Firebird服务器上还原它来完成此操作。请查看此链接以了解后续步骤。
高温加热
sy5wg1nm3#
在任何像样的应用程序中,密码都不是加密存储或以纯文本存储的。
它们是通过计算密码的散列来存储的。散列应该是不可逆的,虽然有几个弱散列算法,但我怀疑如果没有严重的黑客攻击,恢复是可能的。
deikduxw4#
有一种不用旧密码访问数据库的方法
我也忘记了旧火鸟数据库的密码,但根据这个documentation
您不能。密码是使用单向加密算法加密的,无法检索。当您登录时,服务器会加密您输入的密码,并将该哈希值与安全数据库中存储的哈希值进行比较。
因此,唯一的方法是重置密码,即设置一个新的密码。如果您仍然有SYSDBA密码,这很容易,因为SYSDBA可以更改任何用户的密码。如果没有,您需要用一个干净的密码(您知道密码)替换security.fdb。
我所要做的就是安装fresh firebird设置“masterkey”或任何你想要的密码,重新启动,我就可以使用sysdba/masterkey访问fdb文件了。