2013-08-03 57 views
3
的最佳場所

實體數據模型嚮導說:什麼是注入數據庫密碼設置爲默認EF連接字符串

此連接字符串似乎包含敏感數據(例如密碼)時所需的連接到數據庫。將敏感數據存儲在連接字符串中可能存在安全風險。你想在連接字符串中包含這些敏感數據嗎?

我已經沒有選擇了,我發現我的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的默認值?

回答

3

有兩種方法可以在Web.Config中不包含密碼。

  1. 將密碼放在IIS的主機設置中。 IIS爲每個主機保留一個主機配置,並且此主機配置中的所有設置都應用於web.config之前。唯一的問題是,只有管理員可以通過IIS管理控制檯對其進行修改。

  2. 密碼較少連接字符串將使用Application Pool Identity用戶登錄。您可以創建一個Windows用戶並將其設置爲應用程序池標識。併爲您的網站內容文件夾提供閱讀權限。並將此用戶添加到SQL數據庫中並使該用戶擁有數據庫所有者。這是託管網站最安全的方式,因爲每個應用程序池在隔離&中運行,可以爲每個應用程序提供更多權限。唯一的問題是,任務管理器不再顯示工作進程的站點名稱。

在共享主機中,任何具有控制面板訪問權限的人都可以訪問所有內容,但您無法保護它,但這就是我們的做法。

  1. 我們爲開發者創建單獨的FTP登錄來上傳代碼。
  2. 管理員設置配置文件和開發人員不曾上傳web.config。錯誤的是,如果他們上傳,管理員將登錄到一些控制檯或FTP並修改web.config
  3. 開發人員不應授予管理員訪問共享主機控制面板。設置網站以及上傳代碼和編輯web.config必須由管理員完成。
  4. Windows Azure網站允許您在管理控制面板中修改web.config。
+0

對#2 +1:不使用密碼,使用kerberos令牌:) –

+0

感謝您的回答,如果您可以爲共享主機的窮人添加第三條建議,而無需更新主機配置或IIS。 – Alaa

+0

我的意思是根據服務器訪問限制儘可能安全。 – Alaa

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); 
+0

感謝您的回答,您是否每次初始化實體時都這樣做?我正在尋找一個默認的安全地點來傳遞密碼。 – Alaa

+0

是的,實際上:我已經將EntityConnectionString作爲一個屬性,所以如果我需要在我的應用程序的多個位置初始化實體,我只需要調用第二行。 –

+0

DatabasePassword來自哪裏?它是硬編碼的嗎?我在問,因爲那不安全。字符串文字很容易被反編譯。 –

1

而不是注入密碼進入web.config中的連接字符串,則可以使用完整的連接字符串與密碼,但加密它,如this question中所述。

相關問題