8

Always Encrypted を使用する SQL Server 2016 データベースがあります。最近公開された ASP.net Web サイトは、このデータベースからデータを取得しようとしましたが、取得すると次のエラーが発生します。

Error: Failed to decrypt column 'EnSSd'. Failed to decrypt a column encryption key using key store provider: 'MSSQL_CERTIFICATE_STORE'. The last 10 bytes of the encrypted column encryption key are: 'B8-48-B3-62-90-0B-1D-A6-7D-80'. Certificate with thumbprint '97B0D3A64CADBE86FE23559AEE2783317655FD0F' not found in certificate store 'My' in certificate location 'CurrentUser'. Verify the certificate path in the column master key definition in the database is correct, and the certificate has been imported correctly into the certificate location/store. Parameter name: masterKeyPath

これは、証明書がサーバー上の適切な場所に配置されていないことを意味することがわかりました。開発中は、個人証明書ストアの下の証明書スナップインに証明書を配置するだけでうまくいきましたが、サイトが公開されたので、Web サーバーで同じことを試みましたが、うまくいきませんでした (私たちはそれを理解しました)。しません)。

サイトで匿名認証が有効になっており、匿名ユーザー ID は IUSR です。ASP.NET の偽装は無効になっています。

証明書を入れる適切な場所はどこですか?


更新 - アプリケーション プール ID アカウントを証明書を作成したアカウントに変更することで機能するようになりました。また、証明書を Web サーバーの Current User-Personal リストに追加するときに使用されたアカウントでもありました。このアカウントは使用したくないので、証明書をどこに置くのが適切ですか?

4

3 に答える 3

2

Always Encrypted では、データベースにアクセスしているユーザーが公開キーと秘密キーの両方を持っている必要があります。これは、このキーを持っているため、アカウントを使用して証明書を生成する必要があるようです。

私が通常行うことは、証明書を生成し、秘密鍵と安全なパスフレーズを使用して証明書をエクスポートすることです。次に、アプリ プールの実行に使用するアカウントの個人用ストアにキー付きの証明書をインポートします。これは汎用の統合アカウントにすることはできず、指定したサービス アカウントにする必要があります。

ユーザーとしてpowershellスクリプトを実行します。

whoami
COMPUTER\myIISPoolUser
Set-Location -Path cert:\localMachine\my
Import-PfxCertificate –FilePath c:\AlwaysEncrypt.pfx

または mmc を使用します。

whoami
COMPUTER\myIISPoolUser
certmgr.msc

APP プールのユーザーロード ユーザー プロファイルも許可する必要があります。

于 2016-07-21T18:16:50.410 に答える
0

IIS Express での実行は、IIS での実行とは異なります。

その時点で SSMS から列マスター キー (CMK) を作成すると、CEK の作成中に設定した場所に基づいて Always Encrypted 証明書が生成されます。

IIS の場合、MyLocalMachine で証明書を生成し、管理者権限でホスティング サーバーに証明書をインストールする必要があります。これはあなたのために働くでしょう。

また、その証明書へのアクセス権を IIS ユーザーに付与する必要があります。これを行うには、証明書を右クリックし、[主キーの管理] をクリックして IUSR を追加します。

于 2019-03-14T06:11:10.470 に答える