データベースに接続して情報を取得する必要のあるC#アプリケーションを作成したいと思います。私はC#アプリケーションの接続文字列を直接入力すれば、ユーザーは接続文字列を取得してSQL Serverに直接ログインすることができます。一度問題が発生すると、必要なすべての情報を選択できます。
これには良い解決策がありますか?
ありがとうございます!どのようにして情報を機密にすることができますか?
答えて
私は実際に同様の要件を持っていました。私は接続文字列を取得し、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の可能な値です。
これを回避する唯一の方法は、クライアントソフトウェアがデータベースに直接接続するのではなく、データベースの資格情報とSQLを発行するアプリケーションサーバーに接続する3層アーキテクチャです。
クライアントソフトウェアのデータベースユーザーがクライアントアプリケーションが実際に必要とするデータのみを選択できるようにする権限を制限することは可能かもしれません(その他は何もありません)。このアプローチでは、特定のビューを作成し、そのビューに対して選択された権限のみを付与します。ストアドプロシージャは別のツールです。しかし、それはすべてのケースをカバーすることはできない可能性があります。また、誤ってデータベースにバグを与えたり、バグを与えたりすると、権限の昇格が可能になるため、少し危険です。
セキュリティが懸念される場合、私は3層に行きます。
データアクセスレイヤーを作成し、そのレイヤーにアクセスコントロールを追加する必要がありますか?私はデータを選択する必要があるたびに、私は最初に私のユーザー名とパスワードを送信し、許可された後、私は許可しているデータを取得できますか? – MemoryLeak
web.configで接続文字列を暗号化する必要があります。こちらはEncryptとなります。また、これに加えて、Windows認証(trusted connection = true)を使用します。これにより、ユーザーが資格情報を持っていても、自分のIDがActiveDirectory/Domainに追加されなければログインできなくなります。
- 1. Crystalに機密情報が保存されていますか?
- 2. AppIDプレフィックスの機密情報ですか?
- 3. 機密情報をログファイルに隠す
- 4. 機密情報をクラウドファンクションに渡す
- 5. どのようなレベルの機密情報を$ _SESSION変数に保存できますか?
- 6. 私は他のウェブサイトにどのように接続して情報を得ることができますか?
- 7. google-services.jsonは機密情報ですか?
- 8. OAuthアクセストークンは機密情報ですか?
- 9. どのようにして情報を取得することができますか?
- 10. 機密情報(ユーザー名とパスワード)をweb.configに保存していますか?
- 11. どのようにURLの中に含まれるハイスコア情報を隠すことができますか?
- 12. サーバーに情報を送信するが、情報がどこか
- 13. 私のCLIが情報を返すドッカーホストをどのように知ることができますか?
- 14. PhoneGapの機密情報を保護しますか?
- 15. CakePHP:挿入された情報をデータベースにどのように表示することができますか?
- 16. 機密情報をWebアクセス可能なディレクトリに保存していますか?
- 17. このようなクラッシュ情報から有益な情報を得ることはできますか?
- 18. どのように:ghciのtはそのすべての内密情報にアクセスしますか?
- 19. 私はcardviewの情報をどのように入手することができますか?
- 20. githubから機密情報(パスワードなど)を隠す
- 21. Photoshopでレイヤースタイル情報にどのようにアクセスしますか?
- 22. バーチャルクレジットカード - どの情報が渡されますか?どのようにして何を保存できますか?
- 23. マップボックスのような情報をどのように入手できますか?
- 24. 機密情報をkeepassデータベースの中に保存するC#
- 25. Node.jsに 'ws'を使用すると、どのようにしてクライアント情報を取得できますか?
- 26. SAMLRequestに保持されている機密情報はありますか?
- 27. Guava ListenableFuture <Object>はスタックからの情報をどのように待つことができますか?
- 28. シェーダは頂点情報をどのように読み取ることができますか?
- 29. jhipster application-prod.ymlはgithubの機密情報を保存します
- 30. どのように私は要素のユーザー情報にアクセスすることができます
それは方法です、私もそれをやっています。 – TalentTuner
初期化処理中に、接続文字列を復号化すると言います。この解読鍵はアプリにも格納されているのですか、それとも実行時に入力されますか? – Jubal
@jskaggz - 正直言って、キーやIVを打つことを想像することはできません...あなたはそれをやっている間違いを(または少なくとも私は)行うことができます。アプリケーション自体の一部ですが、そのようにするためにアプリをリバースエンジニアリングしようとすると難読化されます。実際にこの問題を処理する方法はいくつかあります。私は、暗号化も通信にも使われているので、リモートから新しい暗号をアプリにプッシュすることができます。暗号を入れ替えることで誰もがセキュリティに侵入することはほぼ不可能になります。 – BonanzaDriver