Самый эффективный способ передачи учетных данных для входа в SQL на серверы Delphi Datasnap?

Использование Delphi XE для создания относительно простого приложения базы данных с помощью Datasnap.

Поскольку некоторая безопасность в моем приложении обеспечивается на уровне базы данных, мне нужно передать учетные данные SQL пользователя из моего клиентского приложения на мой сервер Datasnap.

(Я пытаюсь сделать сервер Datasnap без состояния, если это возможно, поэтому признаю, что мне придется делать это для каждого вызова.)

Я использую ClientDatasets (CDS)на стороне клиента, поэтому я могу использовать OnBeforeGetRecords для передачи данных в OleVariant OwnerData из 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;

Может ли мне помочь компонент Authentication Manager? Любые другие идеи? Или я застрял с OnBeforeGetRecords?

Большое спасибо.

5
задан RichardS 17 April 2012 в 09:09
поделиться