sp_describe_parameter_encryption (Transact-SQL)

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Database Azure SQL Managed Instance

指定した Transact-SQL ステートメントとそのパラメーターを分析して、Always Encrypted 機能を使用して保護されているデータベース列に対応するパラメーターを決定します。 暗号化された列に対応するパラメーターの暗号化メタデータを返します。

構文

sp_describe_parameter_encryption
    [ @tsql = ] N'tsql'
    [ , [ @params = ] N'params [ , ...n ]' ]
[ ; ]

引数

[ @tsql = ] 'tsql'

1 つ以上の Transact-SQL ステートメント。 @tsql は、 nvarchar(n) または nvarchar(max)です。

[ @params = ] N'params'

@paramsは、sp_executesqlに似た@tsqlのパラメーターの宣言文字列を提供します。 パラメーターには、 nvarchar(n) または nvarchar(max)があります。

Transact-SQL_batch に埋め込まれているすべてのパラメーターの定義を含む文字列。 この文字列は Unicode 定数または Unicode 変数にする必要があります。 各パラメーター定義は、パラメーター名とデータ型で構成されます。 n は、追加のパラメーター定義を示すプレースホルダーです。 n は、追加のパラメーター定義を示すプレースホルダーです。 ステートメントで指定されるすべてのパラメーターは、 @paramsで定義する必要があります。 Transact-SQL ステートメントまたはステートメント内のバッチにパラメーターが含まれていない場合、 @params は必要ありません。 NULL は、このパラメーターの既定値です。

戻り値

0 は成功を示します。 それ以外の場合は失敗を示します。

結果セット

sp_describe_parameter_encryption は 2 つの結果セットを返します。

  • データベース列用に構成された暗号化キーを記述する結果セット。指定された Transact-SQL ステートメントのパラメーターが対応します。

  • 特定のパラメーターの暗号化方法を記述する結果セット。 この結果セットは、最初の結果セットで説明されているキーを参照します。

最初の結果セットの各行には、暗号化された列暗号化キーとそれに対応する列マスター キー (CMK) のキーのペアが記述されています。

列名 データ型 説明
column_encryption_key_ordinal int 結果セット内の行の ID。
database_id int データベース ID。
column_encryption_key_id int 列暗号化キー ID。

注: この ID は、 sys.column_encryption_keys カタログ ビューの行を表します。
column_encryption_key_version int 将来の使用のために予約済み。 現在、常に 1が含まれています。
column_encryption_key_metadata_version binary(8) 列暗号化キーの作成時刻を表すタイムスタンプ。
column_encryption_key_encrypted_value varbinary(4000) 列暗号化キーの暗号化された値。
column_master_key_store_provider_name sysname 列暗号化キーの暗号化された値を生成するために使用された CMK を含むキー ストアのプロバイダーの名前。
column_master_key_path nvarchar (4000) 列暗号化キーの暗号化された値を生成するために使用された CMK のキー パス。
column_encryption_key_encryption_algorithm_name sysname 列暗号化キーの暗号化値を生成するために使用される暗号化アルゴリズムの名前。

2 番目の結果セットの各行には、1 つのパラメーターの暗号化メタデータが含まれています。

列名 データ型 説明
parameter_ordinal int 結果セット内の行の ID。
parameter_name sysname @params引数で指定されたパラメーターの 1 つの名前。
column_encryption_algorithm tinyint パラメーターが対応する列に対して構成された暗号化アルゴリズムを示すコード。 現在サポートされている値は、AEAD_AES_256_CBC_HMAC_SHA_256に対して2
column_encryption_type tinyint 列に対して構成された暗号化の種類を示すコード。パラメーターはこれに対応します。 サポートされる値は次のとおりです。

0 - プレーンテキスト (列は暗号化されていません)
1 - 決定論的暗号化
2 - ランダム化された暗号化。
column_encryption_key_ordinal int 最初の結果セット内の行のコード。 参照される行は、列に対して構成された列暗号化キーを記述します。パラメーターは対応します。
column_encryption_normalization_rule_version tinyint 型正規化アルゴリズムのバージョン番号。

解説

Always Encrypted をサポートする SQL Server クライアント ドライバーは、 sp_describe_parameter_encryption を自動的に呼び出して、アプリケーションによって発行されたパラメーター化されたクエリの暗号化メタデータを取得します。 次に、ドライバーは暗号化メタデータを使用して、Always Encrypted で保護されているデータベース列に対応するパラメーターの値を暗号化します。 データベース エンジンにクエリを送信する前に、アプリケーションによって送信されたプレーンテキスト パラメーター値を暗号化されたパラメーター値に置き換えます。

アクセス許可

データベースの VIEW ANY COLUMN ENCRYPTION KEY DEFINITION アクセス許可と VIEW ANY COLUMN MASTER KEY DEFINITION アクセス許可が必要です。

次の例では、表示目的で、 ENCRYPTED_VALUEの値を切り捨てます。

CREATE COLUMN MASTER KEY [CMK1]
WITH (
    KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',
    KEY_PATH = N'CurrentUser/my/A66BB0F6DD70BDFF02B62D0F87E340288E6F9305'
);
GO

CREATE COLUMN ENCRYPTION KEY [CEK1]
WITH VALUES (
    COLUMN_MASTER_KEY = [CMK1],
    ALGORITHM = 'RSA_OAEP',
    ENCRYPTED_VALUE = 0x016E00000163007500720072<...> -- truncated in this example
);
GO

CREATE TABLE t1 (
    c1 INT ENCRYPTED WITH (
        COLUMN_ENCRYPTION_KEY = [CEK1],
        ENCRYPTION_TYPE = Randomized,
        ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
        ) NULL,
);
    
EXEC sp_describe_parameter_encryption
    N'INSERT INTO t1 VALUES(@c1)',
    N'@c1 INT';

最初の結果セットを次に示します。

column_encryption_key_ordinal 1
database_id 5
column_encryption_key_id 1
column_encryption_key_version 1
column_encryption_key_metadata_version 0x99EDA60083A50000
column_encryption_key_encrypted_value 0x016E00000163007500720072<...>
column_master_key_store_provider_name MSSQL_CERTIFICATE_STORE
column_master_key_path CurrentUser/my/A66BB0F6DD70BDFF02B62D0F87E340288E6F9305
column_encryption_key_encryption_algorithm_name RSA_OAEP

2 番目の結果セットを次に示します。

parameter_ordinal 1
parameter_name @c1
column_encryption_algorithm 1
column_encryption_type 1
column_encryption_key_ordinal 1
column_encryption_normalization_rule_version 1