分享方式:


sp_describe_parameter_encryption (Transact-SQL)

適用於:SQL Server 2016 (13.x) 和更新版本 Azure SQL 資料庫 Azure SQL 受控執行個體

分析指定的 Transact-SQL 語句及其參數,以判斷哪些參數對應至使用 Always Encrypted 功能保護的資料庫數據行。 傳回對應至加密數據行之參數的加密元數據。

語法

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

引數

[ @tsql = ] 'tsql'

一或多個 Transact-SQL 語句。 @tsql可能是 nvarchar(nnvarchar(max)

[ @params = ] N'@parameter_name data_type [ ,... n ]'

@params為 @tsql 的參數提供宣告字串,類似於 sp_executesql。 參數可能是 nvarchar(nnvarchar(max)

字串,包含 Transact-SQL_batch中內嵌之所有參數的定義。 字串必須是 Unicode 常數或 Unicode 變數。 每個參數定義都由參數名稱和資料類型組成。 n 是一個預留位置,表示其他參數定義。 n 是一個預留位置,表示其他參數定義。 語句中指定的每個參數都必須在 @params定義。 如果語句中的 Transact-SQL 語句或批次不包含參數, 則不需要@paramsNULL 是此參數的預設值。

傳回值

0 表示成功。 任何其他專案都表示失敗。

結果集

sp_describe_parameter_encryption 會傳回兩個結果集:

  • 描述針對資料庫資料列所設定之密碼編譯金鑰的結果集,所指定 Transact-SQL 語句的參數會對應至 。

  • 描述應如何加密特定參數的結果集。 此結果集會參考第一個結果集中所述的索引鍵。

第一個結果集的每個數據列都會描述一組密鑰:加密的數據行加密密鑰,以及其對應的數據行主要密鑰(CMK)。

資料行名稱 資料類型 描述
column_encryption_key_ordinal int 結果集中數據列的標識碼。
database_id int 資料庫識別碼。
column_encryption_key_id int 數據行加密金鑰識別碼。

注意:此標識元表示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 用來產生資料行加密金鑰加密值的加密演算法名稱。

第二個結果集的每個數據列都包含一個參數的加密元數據。

資料行名稱 資料類型 描述
parameter_ordinal int 結果集中數據列的標識碼。
parameter_name sysname @params 自變數中指定的其中一個參數名稱。
column_encryption_algorithm tinyint 指出參數所對應數據行所設定加密演算法的程序代碼。 目前支援的值適用於 2 AEAD_AES_256_CBC_HMAC_SHA_256
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 DEFINITIONVIEW 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

以下是第二個結果集:

資料行
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