我有一個奇怪的問題,當我試圖發佈我的asp.net mvc應用程序到我的本地(pc)iis與「始終加密」啓用。SQL Server 2016始終加密超時在發佈的IIS
我的應用程序保持超時,當我試圖在本地IIS訪問使用EF6數據庫(未表示):
但是,如果我試圖使用Visual Studio訪問&調試我的asp.net MVC應用程序2017,具有「始終加密已啓用」的數據庫可以完美無缺地訪問。
,也是我可以用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] + ";");
}
}
}
}
}
上面的代碼告訴我這個錯誤:
,有這樣那樣的錯誤,我知道我究竟我必須這樣做:)
- 更改應用程序池的標識誰以前生成的證書的「用戶」。
- 導出當前用戶證書(由始終加密使用)並導入到要用作應用程序池標識的用戶。
現在它工作!
EF應該拋出某種錯誤的明確的,因爲.NET數據提供程序,而不是超時失敗,真正讓我困惑@ _ @
更新時間(1): 現在的問題是如何使用它(證書)與默認ApplicationPoolIdentity,而不是自定義帳戶?
已更新(2): 我已經做了什麼jakub建議,但仍然沒有運氣。
感謝
'g_lp()'方法到底做了什麼?您是否嘗試過分析查詢以查看當您在本地運行時應用程序發送到Sql Server的確切內容? – MBurnham
我使用g_lp.ToList()將所有數據拉出列表,並使用asp.net mvc視圖直接顯示它們。另外,我完成了數據庫分析,結果是OK,profiler顯示(SQL:BatchStarting \t - SQL:BatchCompleted)並且查詢只是簡單地選擇帶有加密列的表。由於記錄數只有2行,我很好奇這個問題是EF/C#庫自身。 – TheRegister
@TheRegister你有這個運氣嗎?我遇到了同樣的問題,但即使將應用程序池強制置於原始證書所有者帳戶下也不起作用。我已經導入了證書,甚至授予了defaultapppool,IUSER和組的許可,但它仍然無法看到證書 – AranDG