2017-02-07 4 views
2

私はこのトピックに関する多くの質問がありますが、読書やグーグルーグの4日間の後、私は固執しています。ベストプラクティス:リモートSQLデータベースにWPFを接続してください

マイ状況:

私はC#でWPFアプリケーションを開発しました。 このアプリケーションは、ユーザーアカウントデータなどを格納するため、データベースに接続する必要があります。今までは、Visual Studio環境のローカルデータベースで、データソースを設定し、マッピングとセッションにFluent NHibernateを使用して作業しました。 これで、ClickOnce経由でアプリケーションをユーザーに配布したいので、ローカルデータベースからオンラインデータベースに切り替える必要があります。

Webサーバー(Debian 8 Jessie 64Bit、カーネルバージョン3.16.0-4-amd64(SMP))、SSHアクセス、およびサーバーの管理用のi-MSCP 1.3.16プラットフォームへのアクセス権があります。私はサーバーのドメインとSQLユーザーのいずれかにデータベースを作成し、phpmyadminにアクセスできます。 私は、SANDHYALAL KUMARの例hereに記載されているように、任意のIPに対してリモートアクセスを許可する手順に従ってきました。 最初の質問:リモートアクセスが現在許可されているかどうかを確認する方法を教えてください。 mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;を実行すると、私は0 rows affected.をパテコンソールで入手するのですか?

第2の重要な質問:今すぐ自分のサーバーに自分のWPFを接続できますか。 私は私が直接このように、あるため、パスワードのセキュリティおよびデータベースのセキュリティのため、サーバーに接続してはならないこと、読んだ:私がそうであるようにしかし、私は、上記の溶液は、私のために働くだろうとは思いません

オンラインのMSSQL Serverはありませんか?または、既存のサーバーを構成する必要がありますか?

私の問題を解決する特定のレイヤーまたはAPIがありますか? WCFまたはRESTかADO.Netは私の解決策ですか?私は本当にこれらの異なる名前にこだわられているので、私は2つの質問に関するいくつかの説明とアドバイスを本当に感謝しています。

+0

...あなたの理解を助けます...あなたがオンラインデータベースに接続するWPFデスクトップアプリケーション...を配布したい希望に...と同時に、接続文字列を保護? –

+0

はい、これは珍しいことですか?私はすべてのアプリケーションが何らかの形でデータベースに接続されているのではないでしょうか?セキュリティに関して、私はWPFとデータベースの間の層が問題を解決するだろうと考えました。 –

+1

実際、これがシナリオの場合、クライアントが接続するAPI(WebApiプロジェクトを使用するのが最も簡単です)を公開する必要があります。 APIはデータベースと安全に通信します。したがって:クライアント - > API - > DB –

答えて

1

あなたのケースは私の場合とほとんど同じです。 私のアプリもWPF(clickonce)で、Microsoft Azure Cloud SQL Serverに接続します。 あなたが知っているように、セキュリティは常に最も重要なので、私はまた数日間苦労しました。

パスワードをデスクトップアプリケーションと配布に入れるとは、ハッカーにパスワードを提供することを意味します。あなたがコメントしたように、WCFでレイヤーを設定し、非対称(RSAなど)のエンコードされたパスワードを保持するWCFを作成します。次に、サーバーは復号化のために非対称キーを持つユーザーのみを認証します。この秘密鍵はサーバー内にのみ存在します。

最初の質問に答える)どのログイン、ユーザーがこれらの役割を持っているか、アクセスを有効にするかどうかを確認するSELECTクエリを作成できます。 インターネット上の多くの場所に便利な例があります。

これはただ明確にする

+0

私の記述したサーバーでWCFがうまく動作するかどうか知っていますか?私はSQL Serverを持っていません、私はdebianサーバー上でmysqlデータベースを実行しています。 WCFの設定が難しいと聞きました。私はウェブサービスの経験がありません。だから、WCFは接続を「ちょうど」設定するのに適していますか? –

+1

今は東アジアの朝です。私はDebianサーバ+ MySQLのケースが私たちの国でもよく見られるということを発見しました。あなたのサーバはIPアドレス(またはドメイン)を持ち、あなたのWPFアプリはWCFのようなコミュニケーションブローカーを介して接続します。私はクラウドサーバを使用しているのでIn-premise Serverについてはわかりませんが、インターネット上で多くのWCF + MySQL記事、質問を見つけることができます。名前はWCF(Window Communication Foundation)のように、コミュニケーションのために最適化されており、あなたの知識のレベルと比べるとセットアップが難しくありません。 –

+0

WCFの作成は簡単ですが、小さくすることはできますが、Serverと通信するSQLコマンドが増えるほど、WCFにはより多くのContracts、Interfacesコードが必要になります。 Contracts、Intercfacesのようなすべての用語は、あなたに慣れていないかもしれませんが、一度学ばれると、何もありません。しかし、私にとって、最も難しいのはセキュリティを理解することでした。終了するには数カ月かかりました。当初は、この種のアーキテクチャが利用可能かどうかはわかりませんでした。 WCF自体は本当に難しいことではありません。セキュリティはあなたが知っている通りに通過しなければならないドアであり、時間がかかることがあります。 –

関連する問題