sp_describe_parameter_encryption (Transact-SQL)

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-Datenbank Azure SQL Managed Instance

Analysiert die angegebene Transact-SQL-Anweisung und deren Parameter, um zu bestimmen, welche Parameter Datenbankspalten entsprechen, die mithilfe des Features "Immer verschlüsselt" geschützt sind. Gibt Verschlüsselungsmetadaten für die Parameter zurück, die verschlüsselten Spalten entsprechen.

Syntax

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

Argumente

[ @tsql = ] 'tsql'

Mindestens eine Transact-SQL-Anweisung. @tsql kann nvarchar(n) oder nvarchar(max)sein.

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

@params stellt eine Deklarationszeichenfolge für Parameter für @tsql bereit, die ähnlich istsp_executesql. Parameter können nvarchar(n) oder nvarchar(max)sein.

Eine Zeichenfolge, die die Definitionen aller Parameter enthält, die in transact-SQL_batch eingebettet sind. Die Zeichenfolge muss eine Unicode-Konstante oder eine Unicode-Variable sein. Jede Parameterdefinition besteht aus einem Parameternamen und einem Datentyp. n ist ein Platzhalter für zusätzlicher Parameterdefinitionen. n ist ein Platzhalter für zusätzlicher Parameterdefinitionen. Jeder in der Anweisung angegebene Parameter muss in @params definiert werden. Wenn die Transact-SQL-Anweisung oder der Batch in der Anweisung keine Parameter enthält, ist @params nicht erforderlich. NULL ist der Standardwert für diesen Parameter.

Rückgabewert

0 gibt an, dass der Erfolg erfolgreich ist. Alles andere deutet auf Fehler hin.

Resultset

sp_describe_parameter_encryption gibt zwei Resultsets zurück:

  • Das Resultset, das kryptografische Schlüssel beschreibt, die für Datenbankspalten konfiguriert sind, entsprechen den Parametern der angegebenen Transact-SQL-Anweisung.

  • Das Resultset, das beschreibt, wie bestimmte Parameter verschlüsselt werden sollen. Dieses Resultset verweist auf die schlüssel, die im ersten Resultset beschrieben werden.

Jede Zeile des ersten Resultsets beschreibt ein Schlüsselpaar: einen verschlüsselten Spaltenverschlüsselungsschlüssel und den entsprechenden Spaltenmasterschlüssel (CMK).

Spaltenname Datentyp BESCHREIBUNG
column_encryption_key_ordinal int ID der Zeile im Resultset.
database_id int Datenbank-ID
column_encryption_key_id int Die Spaltenverschlüsselungsschlüssel-ID.

Hinweis: Diese ID zeigt eine Zeile in der sys.column_encryption_keys Katalogansicht an.
column_encryption_key_version int Für die zukünftige Verwendung reserviert. Enthält derzeit immer 1.
column_encryption_key_metadata_version binary(8) Ein Zeitstempel, der die Erstellungszeit des Spaltenverschlüsselungsschlüssels darstellt.
column_encryption_key_encrypted_value varbinary(4000) Der verschlüsselte Wert des Spaltenverschlüsselungsschlüssels.
column_master_key_store_provider_name sysname Der Name des Anbieters für den Schlüsselspeicher, der den CMK enthält, der verwendet wurde, um den verschlüsselten Wert des Spaltenverschlüsselungsschlüssels zu erzeugen.
column_master_key_path nvarchar(4000) Der Schlüsselpfad des CMK, der verwendet wurde, um den verschlüsselten Wert des Spaltenverschlüsselungsschlüssels zu erzeugen.
column_encryption_key_encryption_algorithm_name sysname Der Name des Verschlüsselungsalgorithmus, der verwendet wird, um den Verschlüsselungswert des Spaltenverschlüsselungsschlüssels zu erzeugen.

Jede Zeile des zweiten Resultsets enthält Verschlüsselungsmetadaten für einen Parameter.

Spaltenname Datentyp BESCHREIBUNG
parameter_ordinal int ID der Zeile im Resultset.
parameter_name sysname Name eines der parameter, die im argument @params angegeben sind.
column_encryption_algorithm tinyint Code, der den verschlüsselungsalgorithmus angibt, der für die Spalte konfiguriert ist, der der Parameter entspricht. Der derzeit unterstützte Wert ist 2 für AEAD_AES_256_CBC_HMAC_SHA_256.
column_encryption_type tinyint Code, der den für die Spalte konfigurierten Verschlüsselungstyp angibt, entspricht der Parameter. Die unterstützten Werte sind:

0 - Nur-Text (die Spalte ist nicht verschlüsselt)
1 - deterministische Verschlüsselung
2 - randomisierte Verschlüsselung.
column_encryption_key_ordinal int Code der Zeile im ersten Resultset. In der Zeile, auf die verwiesen wird, wird der für die Spalte konfigurierte Spaltenverschlüsselungsschlüssel beschrieben, dem der Parameter entspricht.
column_encryption_normalization_rule_version tinyint Versionsnummer des Typnormalisierungsalgorithmus.

Hinweise

Ein SQL Server-Clienttreiber, der Always Encrypted unterstützt, ruft automatisch Aufrufe sp_describe_parameter_encryption zum Abrufen von Verschlüsselungsmetadaten für parametrisierte Abfragen ab, die von der Anwendung ausgegeben werden. Anschließend verwendet der Treiber die Verschlüsselungsmetadaten, um die Werte von Parametern zu verschlüsseln, die Datenbankspalten entsprechen, die mit Always Encrypted geschützt sind. Er ersetzt die von der Anwendung übermittelten Nur-Text-Parameterwerte durch die verschlüsselten Parameterwerte, bevor die Abfrage an das Datenbankmodul gesendet wird.

Berechtigungen

Sie benötigen die Berechtigungen VIEW ANY COLUMN ENCRYPTION KEY DEFINITION und VIEW ANY COLUMN MASTER KEY DEFINITION in der Datenbank.

Beispiele

Im folgenden Beispiel wird der Wert für ENCRYPTED_VALUEanzeigezwecke abgeschnitten.

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';

Dies ist der erste Resultset:

Spalte Wert
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

Dies ist der zweite Resultset:

Spalte Wert
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