2011-01-05 7 views
2

データベースに接続して情報を取得する必要のあるC#アプリケーションを作成したいと思います。私はC#アプリケーションの接続文字列を直接入力すれば、ユーザーは接続文字列を取得してSQL Serverに直接ログインすることができます。一度問題が発生すると、必要なすべての情報を選択できます。
これには良い解決策がありますか?
ありがとうございます!どのようにして情報を機密にすることができますか?

答えて

1

私は実際に同様の要件を持っていました。私は接続文字列を取得し、Rijndael暗号化ロジック(System.Security.Cryptographyで確認してください)を使用して暗号化することで対処しました。それは非常に使いやすいです。私の友人は過去19ヶ月間にわたり、一連のレインボーテーブルを使ってこれを解読しようとしていました - はい、彼は手に余裕があります - 私の太陽系はおそらく私が入ることができます。私は笑った。あまりにも多くの自由時間。

XMLファイルに格納する(必要に応じて変更することができる)接続文字列を取得して暗号化しました。私のアプリケーションは、初期化プロセスの一環として、この値を読み取り、それを解読してからデータベースを接続して開きます。

一度暗号化された.....「V27AsTNsJA + BEwoGR2PbiZum5puwiLbfMa41ens8r8sSiEnn6FiT + k8ImEft Qba8ziCpie94s3bEwcPekqRfhO1Noc8lVeERyezmtqN9/0ZgmzJbNbl/3emTLLfb0Qpj」.....のようなものを終わる「私は暗号化されるデータの一部は午前」..ような何かに..明らかに、侵入しようとする人にはあまり役に立たないでしょう。

128ビット暗号化が低い(これは256ビットもサポートしています)ということも指摘しておきましょう。 128の可能な値、または3.4 e + 38の累乗になります。例えば、毎秒1000000000000回の試行の割合(1,000,000,000,000 /秒)で、それは潜在的にあなたを3百万百万百万を取ることができる

340,000,000,000,000,000,000,000,000,000,000,000,000

あなたがこれを解読しようとすると、:何である膨大な数だと思いますそれを得る年。もちろん、あなたは最初の推測でそれを得るかもしれません....しかし、おそらくそうではありません。

256ビットのキーは1.15 e + 77で、512ビットのキーは1.34 e + 154の可能な値です。

+0

それは方法です、私もそれをやっています。 – TalentTuner

+1

初期化処理中に、接続文字列を復号化すると言います。この解読鍵はアプリにも格納されているのですか、それとも実行時に入力されますか? – Jubal

+0

@jskaggz - 正直言って、キーやIVを打つことを想像することはできません...あなたはそれをやっている間違いを(または少なくとも私は)行うことができます。アプリケーション自体の一部ですが、そのようにするためにアプリをリバースエンジニアリングしようとすると難読化されます。実際にこの問題を処理する方法はいくつかあります。私は、暗号化も通信にも使われているので、リモートから新しい暗号をアプリにプッシュすることができます。暗号を入れ替えることで誰もがセキュリティに侵入することはほぼ不可能になります。 – BonanzaDriver

6

これを回避する唯一の方法は、クライアントソフトウェアがデータベースに直接接続するのではなく、データベースの資格情報とSQLを発行するアプリケーションサーバーに接続する3層アーキテクチャです。

クライアントソフトウェアのデータベースユーザーがクライアントアプリケーションが実際に必要とするデータのみを選択できるようにする権限を制限することは可能かもしれません(その他は何もありません)。このアプローチでは、特定のビューを作成し、そのビューに対して選択された権限のみを付与します。ストアドプロシージャは別のツールです。しかし、それはすべてのケースをカバーすることはできない可能性があります。また、誤ってデータベースにバグを与えたり、バグを与えたりすると、権限の昇格が可能になるため、少し危険です。

セキュリティが懸念される場合、私は3層に行きます。

+0

データアクセスレイヤーを作成し、そのレイヤーにアクセスコントロールを追加する必要がありますか?私はデータを選択する必要があるたびに、私は最初に私のユーザー名とパスワードを送信し、許可された後、私は許可しているデータを取得できますか? – MemoryLeak

1

web.configで接続文字列を暗号化する必要があります。こちらはEncryptとなります。また、これに加えて、Windows認証(trusted connection = true)を使用します。これにより、ユーザーが資格情報を持っていても、自分のIDがActiveDirectory/Domainに追加されなければログインできなくなります。

関連する問題