2017-08-07 173 views
2

我有一個奇怪的問題,當我試圖發佈我的asp.net mvc應用程序到我的本地(pc)iis與「始終加密」啓用。SQL Server 2016始終加密超時在發佈的IIS

我的應用程序保持超時,當我試圖在本地IIS訪問使用EF6數據庫(未表示):

Timeout Pic @ Local IIS

但是,如果我試圖使用Visual Studio訪問&調試我的asp.net MVC應用程序2017,具有「始終加密已啓用」的數據庫可以完美無缺地訪問。

Iis express with VS2017

,也是我可以用SQL Management Studio中訪問它沒有問題。

這兩個(SMSS & ASP.NET網絡配置)使用此配置。

Column Encryption Setting=enabled; 

注:我使用ASP.NET MVC 5 & EF 6時,SQL Server 2016開發版。

對不起,我的英語不好。


更新:

var context = new TestDevEntities(); 
 
      StringBuilder sb = new StringBuilder(); 
 
      string connectionString = context.Database.Connection.ConnectionString; 
 
      using (SqlConnection connection = new SqlConnection(connectionString)) 
 
      { 
 
       connection.Open(); 
 
       using (SqlCommand cmd = new SqlCommand(@"SELECT [id],[name],[CCno] FROM [TestDev].[dbo].[testEncCol]", connection, null, SqlCommandColumnEncryptionSetting.ResultSetOnly)) 
 
       { 
 
        using (SqlDataReader reader = cmd.ExecuteReader()) 
 
        { 
 
         if (reader.HasRows) 
 
         { 
 
          
 
          while (reader.Read()) 
 
          { 
 
           sb.Append(reader[2] + ";"); 
 
          } 
 
         } 
 
        } 
 
       } 
 
      }

我一直在使用.NET Framework數據提供,看看是否有任何線索,會幫我解決這個問題,使用下面的代碼嘗試

上面的代碼告訴我這個錯誤: enter image description here

現在

,有這樣那樣的錯誤,我知道我究竟我必須這樣做:)

  1. 更改應用程序池的標識誰以前生成的證書的「用戶」。
  2. 導出當前用戶證書(由始終加密使用)並導入到要用作應用程序池標識的用戶。

Working

現在它工作!

EF應該拋出某種錯誤的明確的,因爲.NET數據提供程序,而不是超時失敗,真正讓我困惑@ _ @


更新時間(1): 現在的問題是如何使用它(證書)與默認ApplicationPoolIdentity,而不是自定義帳戶?

已更新(2): 我已經做了什麼jakub建議,但仍然沒有運氣。 enter image description here

感謝

+0

'g_lp()'方法到底做了什麼?您是否嘗試過分析查詢以查看當您在本地運行時應用程序發送到Sql Server的確切內容? – MBurnham

+0

我使用g_lp.ToList()將所有數據拉出列表,並使用asp.net mvc視圖直接顯示它們。另外,我完成了數據庫分析,結果是OK,profiler顯示(SQL:BatchStarting \t - SQL:BatchCompleted)並且查詢只是簡單地選擇帶有加密列的表。由於記錄數只有2行,我很好奇這個問題是EF/C#庫自身。 – TheRegister

+0

@TheRegister你有這個運氣嗎?我遇到了同樣的問題,但即使將應用程序池強制置於原始證書所有者帳戶下也不起作用。我已經導入了證書,甚至授予了defaultapppool,IUSER和組的許可,但它仍然無法看到證書 – AranDG

回答

1

的一種方式(可能是唯一的途徑)使用默認應用的身份,而不是一個自定義(用戶)帳戶的證書存儲在本地計算機證書存儲區(不當前用戶)。

在本地計算機證書存儲區中創建證書後,您需要授予DefaultAppPool對證書的訪問權限。您可以使用Microsoft管理控制檯(和本地計算機證書的插件)執行此操作:

  1. 右鍵單擊證書,選擇所有任務>管理私鑰。
  2. 點擊添加。
  3. 將位置設置到您的計算機(而不是您的域)。
  4. 輸入IIS AppPool \ DefaultAppPool作爲對象名稱。
  5. 單擊確定兩次。
+0

我已經完成了你的建議(請參閱上面的解釋),仍然沒有運氣,是否有任何建議我應該做? – TheRegister

相關問題