Usando Delphi XE para construir una aplicación de base de datos relativamente sencilla utilizando Datasnap.¿La forma más eficiente de pasar las credenciales de inicio de sesión SQL a los servidores Delphi Datasnap?
Dado que parte de la seguridad de mi aplicación se maneja a nivel de base de datos, necesito pasar las credenciales de SQL de un usuario de mi aplicación cliente a mi servidor Datasnap.
(estoy tratando de hacer que el servidor DataSnap sin estado, si es posible, por lo que reconocer que voy a tener que hacer esto para cada llamada.)
estoy usando ClientDatasets (CDS) en el lado del cliente por lo que podría usar OnBeforeGetRecords para pasar los datos en OwnerData OleVariant desde el CDS en el cliente al correspondiente TDataSetProvider en el servidor. Pero eso significa que cada CDS en cada módulo de datos tiene que tener un evento que hace esto, que parece desordenado y difícil de manejar. No puedo evitar sentir que debe haber una forma de pasar mensajes al servidor en un nivel más alto que eso.
Lo que realmente me gustaría es algo como esto en el nivel DSServerClass en el lado del servidor:
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;
Podría el componente Administrador de autenticación ayudarme aquí? ¿Alguna otra idea? ¿O estoy atrapado con OnBeforeGetRecords?
Muchas gracias.
Gracias, eso parece funcionar - obvio ahora lo señalas pero eso probablemente me ha salvado días. – RichardS