3

エンティティ データ モデル ウィザードには、次のように表示されます。

この接続文字列には、データベースへの接続に必要な機密データ (パスワードなど) が含まれているようです。接続文字列に機密データを格納すると、セキュリティ上のリスクが生じる可能性があります。この機密データを接続文字列に含めますか?

[いいえ] を選択したところ、Web.config に次のような新しい接続文字列が生成されました。

 <add name="eMarket_DBEntities" connectionString="metadata=res://*/App_Code.EFModel.csdl|res://*/App_Code.EFModel.ssdl|res://*/App_Code.EFModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\sqlexpress;initial catalog=eMarket_DB;user id=sa;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient;" />

また、Web.config で:

  <entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />

EF の既定のパスワードを一度に渡すのに最適な場所と方法は?

4

3 に答える 3

3

Web.Config にパスワードを含めない方法は 2 つあります。

  1. IIS のホスト設定にパスワードを入力します。IIS はホストごとにもう 1 つのホスト構成を保持し、このホスト構成のすべての設定は web.config の前に適用されます。唯一の問題は、管理者のみが IIS 管理コンソールを介して変更できることです。

  2. パスワードレス接続文字列は、アプリケーション プール ID ユーザーを使用してログインします。Windows ユーザーを作成し、それをアプリケーション プール ID として設定できます。また、サイト コンテンツ フォルダーへの読み取りアクセス権も付与します。そして、このユーザーを SQL データベースに追加し、このユーザーを db-owner にします。これは、各アプリケーション プールが分離して実行され、アプリごとにより多くの権限を付与できるため、サイトをホストする最も安全な方法です。唯一の問題は、タスク マネージャーがワーカー プロセスのサイト名を表示しなくなったことです。

共有ホスティングでは、コントロール パネルにアクセスできる人はおそらくすべてにアクセスできます。セキュリティを確保するためにできることはほとんどありませんが、これが私たちのやり方です。

  1. 開発者がコードをアップロードするための別の FTP ログインを作成します。
  2. 管理者が構成ファイルをセットアップし、開発者が web.config をアップロードすることはありません。誤ってアップロードすると、管理者はコンソールまたは ftp にログインして web.config を変更します。
  3. 開発者には、共有ホスティング コントロール パネルへの管理者アクセス権を付与しないでください。コードのアップロードと web.config の編集を伴う Web サイトの設定は、管理者が行う必要があります。
  4. Windows Azure Web サイトでは、管理コントロール パネルで web.config を変更できます。
于 2013-08-03T07:44:14.123 に答える
1

エンティティの初期化中に、同じ形式を使用して構築された接続文字列をWeb.configファイルに渡します。

String EntityConnectionString = String.Format("metadata=res://*/App_Code.EFModel.csdl|res://*/App_Code.EFModel.ssdl|res://*/App_Code.EFModel.msl;provider=System.Data.SqlClient;provider connection string='data source={0};initial catalog={1};persist security info=True;user id={2};password={3};multipleactiveresultsets=True;App=EntityFramework;Enlist=false'", ServerName, DatabaseName, DatabaseUserName, DatabasePassword);

    EntityContainer EntityDB = new EntityContainer(EntityConnectionString);
于 2013-08-03T05:51:41.763 に答える
1

この質問で説明されているように、パスワードを web.config の接続文字列に挿入するのではなく、完全な接続文字列とパスワードを使用して暗号化することができます。

于 2013-08-03T06:07:58.343 に答える