SQL Server 2016始终加密超时在发布的IIS

问题描述:

我有一个奇怪的问题,当我试图发布我的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

的一种方式(可能是唯一的途径)使用默认应用的身份,而不是一个自定义(用户)帐户的证书存储在本地计算机证书存储区(不当前用户)。

在本地计算机证书存储区中创建证书后,您需要授予DefaultAppPool对证书的访问权限。您可以使用Microsoft管理控制台(和本地计算机证书的插件)执行此操作:

  1. 右键单击证书,选择所有任务>管理私钥。
  2. 点击添加。
  3. 将位置设置到您的计算机(而不是您的域)。
  4. 输入IIS AppPool \ DefaultAppPool作为对象名称。
  5. 单击确定两次。
+0

我已经完成了你的建议(请参阅上面的解释),仍然没有运气,是否有任何建议我应该做? – TheRegister