2016-08-29 4 views
0

SQL Serverとクライアント(c#)を作成して、直接サーバーに照会しました。問題は、すべてのクライアント(合計5つの異なるクライアント)が接続文字列を持つため、これは安全ではないと感じていることです。これは重大な脆弱性だと私は信じています。SQL Serverのバックエンド

私のマシン上で実行されているSQL Serverのバックエンドを作成する最適な方法は何ですか?このSQL Serverは、さまざまなクライアントからインターネット経由でアクセスできる必要があります。いくつかのC#アプリケーションがクライアントからの呼び出しを解釈するために実行している最良のオプションですか?

答えて

2

クライアントにログインせずにCRUDを許可するとセキュリティは失われません。クライアントに接続文字列を渡す場合は、必要でない場合は安全ではありません。

より安全なバックエンドアプリケーションを実装する方が良い場合は、アクションをAPIにラップすることです(たとえばUpdateClientInfo()と言う)。すべてのデータベースアクセスがAPIに入り、クライアントがAPIを使用できるようにします。この場合、接続文字列はインターネット経由で転送されません。

既存のAPIがクライアントに適していない場合は、接続文字列を提供するのではなく、要求を引き出してリクエストを実装するようにお願いします。

サービスにアクセスするには、クライアントにuser + passwordを要求する必要があります。

+0

1)これについて私に読んでもらえるいいリソースはありますか? – Kafros

+1

もちろん:http://www.asp.net/web-api –

+1

他のREST APIを見て、他の人がリソースをどのようにグループ化しているかを調べてください。これはあまりにも粗すぎず、あまり細かくないAPIを設計するのに役立ちます。 –

1

多くの解決策があります。データベースサーバーを公開することは、常にセキュリティリスクです。あなたは明らかにWindowsサーバー上で実行しているので、WCFサービスを使用してクライアントとデータベース間の通信を処理します。

また、C#でポート80または(好ましくは)443を使用して通信できるRESTサービスを実装することも可能です。ファイアウォールの設定によっては、いずれにしても標準であるため、ほとんどの場合、クライアント側からの発信通信用に開かれ、サーバー側で有効にすることができます。

リソースをグループ化する方法を確認するには、既存のAPI(オンラインショップなど)を確認します。これにより、より良いAPIを自分で設計するのに役立ちます。

+1

私は少量のユーザー(〜5)があるので、なぜそれが悪いですか接続文字列にユーザー名/パスワードを追加し、このようなログインを処理するアイデアですか?バックエンドがなく、クエリがクライアントから直接起動されるかどうかは関係ありません。 – Kafros

+1

あなたが知っているユーザーは、そのサーバーにアクセスしようとする唯一のユーザーではありません。ハッキングの試行回数を確認すると驚くでしょう。また、実装を簡単に変更することはできません。 REST APIサービスを使用すると、クライアントは特定のインタフェースを介してデータにアクセスできますが、実際のロジックは1つのサービスインスタンスに存在します。あなたの場合のロジックを変更するには、すべてのクライアントの更新が必要です。サービスを使用する場合は、単一の障害点しかありません。 –

+1

私はあなたのやり方をすることができないと言っているわけではありません - 私はちょっと言っています:-)また、どうやってコミュニケーションを確保していますか?中間者が接続データにアクセスできないようにする必要があります。次に、通信が暗号化されているかどうかを確認する必要があります。HTTPS経由でRESTサービスを作成する場合は、すべて無料です。 –

関連する問題