1

約 500 人の従業員がいる会社の全従業員のデータを格納するためのアプリケーションを c# と SQLite で作成しました。データベースとアプリケーションをファイル サーバー/共有フォルダー (MS サーバー) に配置したい。これにより、すべての従業員のデスクトップにアプリケーションのショートカットが作成されます。アプリケーションを実行するユーザーの許可に基づいて、いくつかの入力フィールド (テキスト ボックス) を有効/無効にしたいと考えています。それを行うためのベストプラクティスは何ですか?

ユーザーが自分のアプリケーションのみを介してデータベースで読み取り/書き込みできるようにしたい (アプリケーションは同じデータベース フォルダーにあります)。ユーザーが自分のアプリケーションなしでデータベースにアクセスできないようにします。どうやってするか?

4

2 に答える 2

2

ユーザーがデータベースにアクセスできないようにする場合は、クライアント サーバー アーキテクチャを作成する必要があります。

ファイル サーバーと同じマシンでサービスを実行し (Windows サービスとして実行)、サーバーとクライアント間の通信に WCF を使用できます。サーバーからデータベースにアクセスし、サーバーがユーザーを認証し、ユーザーがアプリケーションにアクセスできることを検証します。

クライアント アプリケーション内でデータベース資格情報をごまかして「隠蔽」しようとすることはできますが、それはあいまいさによるセキュリティであり、ある程度のプログラミング スキルなどを持っている人なら誰でもデータベースへの資格情報を見つけ出し、データベースに直接接続できます。

于 2012-11-15T13:09:11.613 に答える
2

ユーザーが自分のアプリケーションなしでデータベースにアクセスできないようにしたい

アプリケーションが Windows ファイル共有経由で SQLite データベースに直接アクセスする場合、これは不可能です。確かに、不便にすることはできますが、実際には不可能です。

これを実現する唯一の方法は、ミドルウェアを導入することです。

これは通常、クライアント アプリケーションからの接続をリッスンし、それらを認証し、基になるデータベースへのすべてのアクセスを管理するサービス (おそらく WCF) です。データベースは、サーバーのみが表示できる場所に格納され、Windows 共有を介してユーザーに表示されることはありません。

また、SQLite はマルチユーザー システムに最適な選択肢ではありません。ここでは、一石二鳥です。ネットワーク経由でクライアント接続を受け入れる DBMS (MS SQL Server Express は無料で、MySQL、PostgreSQL も一般的な無料の選択肢です) に切り替えて、データベース サーバーに直接接続するアプリケーションを構築します。 (このように統合 Windows 認証を使用することもできるため、明示的なログオンを避けることができます)。単純なシナリオでは、これで十分な場合があり、明示的なサービス レイヤーを構築する必要がなくなります。

より複雑なシナリオでは、アプリケーションとデータベースの間にミドルウェア層を配置することは理にかなっています。この方法では、アプリケーションの設計を変更したり、すべてのクライアント マシンに展開したりすることなく、データベースの設計を変更できます。代わりに、単に変更するだけです。ミドルウェア レイヤーを 1 か所に配置すると、アプリケーションはその違いを認識できなくなります。

于 2012-11-15T13:11:53.477 に答える