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;
Authentication Manager コンポーネントはここで役に立ちますか? 他のアイデアはありますか?または、OnBeforeGetRecords にこだわっていますか?
どうもありがとう。