使用Delphi XE构建一个相对简单的基于Datasnap的数据库应用程序。
由于我的应用程序中的某些安全性是由数据库级别处理的,因此我需要将用户的SQL凭据从客户端应用程序传递到Datasnap服务器。
(如果可能,我试图使Datasnap服务器无状态,所以请注意,我必须为每个调用执行此操作。)
我在客户端使用ClientDatasets(CDS),因此我可以使用OnBeforeGetRecords将数据从客户端上的CDS中的OwnerData OleVariant传递到服务器上相应的TDataSetProvider。但这意味着每个数据模块上的每个CDS都必须具有执行此操作的事件,这似乎很混乱和笨重。我不禁觉得一定有一种方法可以在比那更高的级别上向服务器传递消息。
我真正想要的是在服务器端的DSServerClass级别上类似于这样的东西:
由于我的应用程序中的某些安全性是由数据库级别处理的,因此我需要将用户的SQL凭据从客户端应用程序传递到Datasnap服务器。
(如果可能,我试图使Datasnap服务器无状态,所以请注意,我必须为每个调用执行此操作。)
我在客户端使用ClientDatasets(CDS),因此我可以使用OnBeforeGetRecords将数据从客户端上的CDS中的OwnerData OleVariant传递到服务器上相应的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?
非常感谢。