2011-01-06 11 views
2

2つの異なる顧客、顧客Aと顧客Bに関連する多くのレコードを持つSQL 2008データベーステーブルがあるとします。MS Sync Frameworkを使用してクライアント固有のデータをフィルタする方法は?

私は、すべてのレコードをフェッチするファットクライアントアプリケーションを構築したいと思います顧客A またはカスタマーBのいずれかに特有のものを要求したユーザーの資格情報に基づいて抽出し、取り出したレコードを一時的なローカル表に保管します。セキュリティのためのフィルタリングに依存しないでください

:私はこの小さな栗出くわしたとき、私はこれを達成するためにMS Sync Frameworkのを使用する場合があります考える

は、私は、行のフィルタリングについて読み始めました。 クライアントまたはユーザーIDに基づいて サーバーからのデータをフィルタリングする機能は、セキュリティ機能ではなく です。 という単語では、このアプローチを使用して、あるクライアントが別のクライアントに属するデータ を読み取らないようにすることはできません。 この フィルタリングのタイプは、 データを分割し、 のデータ量をクライアントのデータベース に減らすためにのみ役に立ちます。

だから、これはMS Sync Frameworkのは、あなただけは、点Aと点Bの間全体テーブルを複製する良い選択肢であることを私に言っていますか?

これはフレームワークの極限的な特徴ではないようですか?あるいは、私はこのステートメントを間違って解釈していますか?あるいは、私の目的を達成するためにフレームワークを使用する他の方法がありますか?

アイデアは誰ですか?

ありがとうございます!

答えて

1

いいえ、セキュリティ警告のみです。

私たちは、半接続型のアプリケーションでフィルタリングを広範囲に使用しています。

//helper 
void PrepareFilter(string tablename, string filter) 
{ 
    SyncAdapters.Remove(tablename); 

    var ab = new SqlSyncAdapterBuilder(this.Connection as SqlConnection); 
    ab.TableName = "dbo." + tablename; 
    ab.ChangeTrackingType = ChangeTrackingType.SqlServerChangeTracking; 
    ab.FilterClause = filter; 
    var cpar = new SqlParameter("@filterid", SqlDbType.UniqueIdentifier); 
    cpar.IsNullable = true; 
    cpar.Value = DBNull.Value; 
    ab.FilterParameters.Add(cpar); 

    var nsa = ab.ToSyncAdapter(); 
    nsa.TableName = tablename; 

    SyncAdapters.Add(nsa); 
} 

// usage 
void SetupFooBar() 
{ 
    var tablename = "FooBar"; 
    var filter = "FooId IN (SELECT BarId FROM dbo.GetAllFooBars(@filterid))"; 

    PrepareFilter(tablename, filter); 
} 
+0

グレート:

は、ここであなたが始めるためにいくつかのコードです!私は本当に、本当に*これが安全に無視できるものになることを望んでいました! –

+0

私は同様のものを実装しています。クライアント側のデータベースでは何を使用していますか?コンパクトまたはエクスプレス? – stombeur

+0

@StephaneT:コンパクト。情報のための – leppie

関連する問題