Utilizzo di Delphi XE per creare un'app per database relativamente semplice con Datasnap.Il modo più efficiente per passare le credenziali di accesso SQL ai server Datasnap Delphi?
Poiché una certa sicurezza nella mia applicazione è gestita a livello di database, ho bisogno di passare le credenziali SQL di un utente dalla mia app client al mio server Datasnap.
(sto cercando di rendere il server DataSnap senza stato, se possibile, in modo da riconoscere che dovrò fare questo per ogni chiamata.)
sto usando ClientDatasets (CDS) sul lato client in modo da potrebbe utilizzare OnBeforeGetRecords per passare i dati nel proprietarioData OleVariant dal CDS sul client al TDataSetProvider corrispondente sul server. Ma questo significa che ogni singolo CDS su ogni modulo dati deve avere un evento che faccia questo, che sembra disordinato e ingombrante. Non posso fare a meno di sentire che ci deve essere un modo per trasmettere messaggi al server a un livello più alto di quello.
Quello che mi piacerebbe davvero è qualcosa di simile a livello DSServerClass sul lato server:
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;
Può la componente Authentication Manager aiutarmi qui? Altre idee? O sono bloccato con OnBeforeGetRecords?
Molte grazie.
Grazie, sembra funzionare - ovvio ora lo fai notare ma probabilmente mi ha risparmiato giorni. – RichardS