3

"Always Encrypted" が有効になっているローカル (PC) iis に asp.net mvc アプリケーションを発行しようとすると、奇妙な問題が発生します。

ローカル IIS (高速ではない) で EF6 を使用してデータベースにアクセスしようとしたときに、アプリケーションがタイムアウトを保持します。

タイムアウト写真 @ ローカル IIS

しかし、Visual Studio 2017 を使用して asp.net mvc アプリにアクセスしてデバッグしようとすると、「常に暗号化が有効」なデータベースにタイムアウトなしで完全にアクセスできます。

Iis Express with VS2017

また、SQL Management Studio で問題なくアクセスできます。

両方 (SMSS と ASP.NET Web 構成) でこの構成を使用します。

Column Encryption Setting=enabled;

注: ASP.NET MVC 5 & EF 6、SQL Server 2016 Developer Edition を使用しています。

私の悪い英語でごめんなさい。


更新: .NET Framework Data Provider を使用して、次のコードを使用して、この問題の解決に役立つ手がかりがあるかどうかを確認してみました:

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

上記のコードは、このエラーを表示します: ここに画像の説明を入力

さて、この種のエラーで、私は正確に私がしなければならないことを知っています:)

  1. アプリケーション プールの ID を、以前に証明書を生成した「ユーザー」に変更します。
  2. 現在のユーザー証明書 (常に暗号化されている) をエクスポートし、アプリケーション プール ID として使用するユーザーにインポートします。

働く

これでうまくいきました!

EF は、@_@ 本当に混乱するタイムアウト エラーの代わりに、.NET データ プロバイダーと同じくらい明確な何らかのエラーをスローする必要があります。


UPDATED (1) : 問題は、カスタム アカウントの代わりにデフォルトの ApplicationPoolIdentity でそれ (証明書) を使用する方法です。

更新 (2) : jakubが提案すること を実行しましたが、まだ運がありません。 ここに画像の説明を入力

ありがとう

4

1 に答える 1