将SQL登录凭据传递给Delphi Datasnap服务器的最有效方法?

Ric*_*rdS 5 delphi datasnap

使用Delphi XE使用Datasnap构建一个相对简单的数据库应用程序.

由于我的应用程序中的某些安全性是在数据库级别处理的,因此我需要将用户的SQL凭据从我的客户端应用程序传递到我的Datasnap服务器.

(我想尽可能使Datasnap服务器无状态,所以要认识到每次调用我都必须这样做.)

我在客户端使用ClientDatasets(CDS),因此我可以使用OnBeforeGetRecords将OwnerData 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;
Run Code Online (Sandbox Code Playgroud)

Authentication Manager组件可以帮助我吗?还有其他想法吗?还是我坚持使用OnBeforeGetRecords?

非常感谢.

Uwe*_*abe 3

您可以使用 SQL 凭据作为用户名和密码来连接到 DataSnap 服务器。这些值可以在身份验证管理器中进行验证和/或简单地转发到底层 SQLConnection 组件以连接到 SQL 服务器。