gpt4 book ai didi

sql-server - SQL Server 2016 始终在已发布的 IIS 上加密超时

转载 作者:行者123 更新时间:2023-12-02 01:09:54 24 4
gpt4 key购买 nike

当我尝试将我的 asp.net mvc 应用程序发布到我的本地 (pc) iis 并启用“始终加密”时,我遇到了一个奇怪的问题。

当我尝试在本地 IIS 上使用 EF6 访问数据库时,我的应用程序保持超时(不是 express):

Timeout Pic @ Local IIS

但如果我尝试使用 Visual Studio 2017 访问和调试我的 asp.net mvc 应用程序,则可以在没有超时的情况下完美访问“始终启用加密”的数据库。

Iis express with VS2017

而且我可以毫无问题地使用 SQL Management Studio 访问它。

两者(SMSS 和 ASP.NET 网络配置)都使用此配置。

Column Encryption Setting=enabled;

注意:我使用的是 ASP.NET MVC 5 和 EF 6,SQL Server 2016 Developer Edition。

抱歉我的英语不好。


更新:我尝试使用 .NET Framework 数据提供程序来查看是否有任何线索可以帮助我解决此问题,使用以下代码:

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] + ";");
}
}
}
}
}

上面的代码告诉我这个错误: enter image description here

现在,对于这种错误,我知道我必须做 :)

  1. 将应用程序池的身份更改为之前生成证书的“用户”。
  2. 导出当前用户证书(始终加密使用)并导入您要用作应用程序池身份的用户。

Working

现在它成功了!

EF 应该像 .NET 数据提供程序那样清楚地抛出某种错误,而不是真正让我感到困惑的超时失败@_@


更新 (1) :现在的问题是如何将它(证书)与默认的 ApplicationPoolIdentity 而不是自定义帐户一起使用?

更新 (2):我做了什么jakub建议,但仍然没有运气。 enter image description here

谢谢

最佳答案

使用 DefaultAppPool 身份而不是自定义(用户)帐户的一种方法(可能是唯一方法)是将证书存储在本地计算机证书存储区(而不是当前用户)中。

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

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

关于sql-server - SQL Server 2016 始终在已发布的 IIS 上加密超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45549697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com