口令加密问题
我现在是这样实现的
数据库口令存在数据库中,用一个公用的低权限用户可以获取。修改权限为高权用户。
比如我在数据库中建了一个表DBKL里面存有数据库的密码(需要加密存放)
用一个公用的低权限用户(在注册表中可以获得)只可以有查询DBKL表的权限。这样得到数据库的口令,然后才可以连接。
但如果用户在ORACLE自带的工具中改了口令,则不能及时反馈到DBKL表中,且要是加密(在取口令的时候要解密)怎么实现?(怎么能及时更新?加密的算法?是不是要单独做个加密的程序,把改完的数据库口令加密后存到DBKL表中?)
如下
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('SOFTWARE\rcj',true);
if reg.ReadString('DBconnectstring')='' then
begin
reg.WriteString('DBconnectstring','pass');
reg.WriteString('DBusername','rcj');
end;
if reg.ReadString('systemuser')='' then
begin
reg.WriteString('systemuser','RCJ');
reg.WriteString('systemusergh','0004');
end;
try
f_database.Session.Connected:=false;
f_database.Session.LogonDatabase:=Reg.ReadString('DBconnectstring');
f_database.Session.LogonUsername:=Reg.ReadString('DBCXusername');
f_database.Session.LogonPassword:=Reg.ReadString('DBCXpassword');
f_database.Session.Connected:=true;
except
MessageDlg('查询口令失败,请与管理员联系',mtinformation,[mbok],0);
Application.Terminate;
end;
with ODS_log do
begin
close;
sql.Clear;
sql.Add('select dbkl from RCJ.DBKLB');
open;
dbkl:=fieldbyname('dbkl').asstring;
close;
end;
try
f_database.Session.Connected:=false;
f_database.Session.LogonDatabase:=Reg.ReadString('DBconnectstring');
f_database.Session.LogonUsername:=Reg.ReadString('DBusername');
f_database.Session.LogonPassword:=dbkl;
f_database.Session.Connected:=true;
for i:=0 to f_database.ComponentCount-1 do
begin
if f_database.Components[i].ClassName='TOracleDataSet' then
TOracleDataset(f_database.Components[i]).open;
end;
except
MessageDlg('数据库连接失败,请与管理员联系',mtinformation,[mbok],0);
Application.Terminate;
end;