7

まず、これは教育的な質問です。私は C# の基礎を学んでいるので、実稼働アプリケーションに実装するものではありません。

現在、2 つ (実際には 3 つですが、1 つが単体テスト) のプロジェクトを含むソリューションがあります。

  • クラス ライブラリ

クラス ライブラリ内にはDatabase.cs、MySQL データベースと通信するクラスがあります。私はこのクラスと直接通信しませんDatabase.csが、クラス ライブラリ内の他のクラスは通信します (たとえばProducts.cs)。ただし、この MySQL データベースに接続するには資格情報が必要ですが、安全に接続する方法がわかりません。

クラスライブラリ内に保存する/クラス内に資格情報をハードコーディングします。

ユーザーは簡単に DLL を取得でき、技術的にはデータベースへの資格情報を取得できるため、これは私には意味がありません。

フォームを介して資格情報をクラス ( などProducts.cs) に渡し、そのクラスは Database オブジェクトの初期化中に資格情報を渡します。

動作する可能性があり、試してみると動作しますが、これが「最も適切な」方法であるかどうかはわかりません。

資格情報を持つプロパティを含む静的クラスを作成します

繰り返しますが、クラス ライブラリ内にこの静的クラスを作成すると、最初の例とほぼ同じになります。この静的クラスを 内に作成する場合はForm、クラス ライブラリからフォーム プロジェクトへの参照を追加する必要があります (希望する方法ではありません)。

調べてみましたが、どうやら間違っているようです。これを行う他の方法はありますか?

4

2 に答える 2

4

まず、クレデンシャルをコードにハードコーディングしないでください。クレデンシャルは時間の経過とともに変化する傾向があるため、SQLクレデンシャルが変更されるたびに、アプリケーションを再コンパイルして再デプロイする必要があります。

通常、データベースへの接続に必要なすべての情報は、接続文字列の形式でアプリケーション構成ファイルに保存されます。

アプリケーションがWebアプリケーションの場合は、web.config(Webアプリケーション構成ファイル)がWebサーバーに保存され、Web要求に提供されることはないため、これで問題ありません。ただし、アプリケーションがWindowsフォームアプリケーションの場合、セキュリティ上の考慮事項は、アプリを使用するすべてのユーザーがアプリケーション構成ファイルを調べて資格情報を取得できることを意味します。Microsoft SQLの場合は、Windows認証を使用することをお勧めします。しかし、MySQLでは、ユーザー名とパスワードを接続文字列に保存する運命にあると思います。次に、接続文字列を暗号化して保護することをお勧めします。

また、ユーザーがMySQLサーバーに対して認証できる/認証する必要がある場合(MySQLのユーザー名とパスワードを入力)、接続文字列テンプレートを使用して、その特定の部分をユーザー名とパスワードに置き換えることができます:
app.config

<connectionStrings>
    <add name="MyApplication" connectionString="Location=myServerAddress;Data Source=myDataBase;User ID={0};Password={1};
Port=3306;Extended Properties=""""; />
  </connectionStrings>

C#コード

var username = textboxUsername.Text;
var password = textboxPassword.Text;

var connectionString = string.Format(ConfigurationManager.ConnectionStrings["MyApplication"].ConnectionString, username, password)
// at this point you have a connection string whitch could be passed to your Products class
于 2013-03-07T20:01:41.673 に答える
1

問題が発生する可能性があるため、資格情報をハードコーディングしないでください。まず、後の段階でログイン資格情報をデータベースに変更する必要がある場合は、クラス ライブラリを再コンパイルする必要があります。次に、セキュリティが侵害されると述べているためです。

接続情報をデータ レイヤーに格納するのではなく、メイン アプリケーションに任せておくことをお勧めします。実行時に接続文字列を受け入れるようにデータ レイヤーをリファクタリングします。この値は、メイン アプリケーションによってデータ アクセス レイヤーに渡される必要があります。

これにより、次の 2 つの利点が得られます。

  1. アプリケーションをデプロイするとき、デプロイされた場所は開発環境とは異なる接続資格情報を持つことができます
  2. セキュリティを強化するために、構成ファイル内の接続文字列を暗号化できます
于 2013-03-07T20:02:24.677 に答える