使用Delphi XE构建使用Datasnap的相对简单的数据库应用程序。将SQL登录凭证传递给Delphi Datasnap服务器的最有效方法?
由于我的应用程序中的某些安全性是在数据库级别处理的,因此我需要将用户的SQL凭据从我的客户端应用程序传递到我的Datasnap服务器。
(我试图使DataSnap服务器无国籍如果可能的话,所以承认,我将不得不在每次调用做到这一点。)
我在客户端使用ClientDatasets(CDS),所以我可以使用OnBeforeGetRecords将OwnerDataData OleVariant中的数据从客户端上的CDS传递到服务器上相应的TDataSetProvider。但是这意味着每个数据模块上的每个CDS都必须有一个事件来完成这个任务,这看起来很麻烦和笨拙。我不禁感到,必须有一种方法可以将消息传递到服务器的更高层次。
我真正喜欢的是像这样在服务器端的DSServerClass级别:
Procedure TMyServerContainer.MyServerClassCreateInstance(DSCreateInstanceEventObject: TDSCreateInstanceEventObject);
begin
// Server detects request for data from client app
fUsername := GetUsernameFromClientSomehow;
fPassword := GetPasswordFromClientSomehow;
// create data modules and initialise
MyDataModule := TMyDataModule.Create(nil);
MyDataModule.InitialiseWithSQLCredentials(fUsername, fPassword);
DSCreateInstanceEventObject.ServerClassInstance := MyDataModule;
End;
能验证管理器组件帮助我在这里?任何其他想法?或者我坚持使用OnBeforeGetRecords?
非常感谢。
谢谢你,这似乎工作 - 显然现在你指出,但可能已经救了我几天。 – RichardS 2012-04-17 13:27:49