sp_describe_parameter_encryption (Transact-SQL)

Si applica a: SQL Server 2016 (13.x) e versioni successive Database SQL di Azure Istanza gestita di SQL di Azure

Analizza l'istruzione Transact-SQL specificata e i relativi parametri per determinare quali parametri corrispondono alle colonne di database protette tramite la funzionalità Always Encrypted. Restituisce i metadati di crittografia per i parametri che corrispondono alle colonne crittografate.

Sintassi

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

Argomenti

[ @tsql = ] 'tsql'

Una o più istruzioni Transact-SQL. @tsql potrebbe essere nvarchar(n) o nvarchar(max).

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

@params fornisce una stringa di dichiarazione per i parametri per @tsql, simile a sp_executesql. I parametri possono essere nvarchar(n) o nvarchar(max).

Stringa che contiene le definizioni di tutti i parametri incorporati nella SQL_batch Transact-SQL_batch. La stringa deve essere una costante o una variabile Unicode. Ogni definizione di parametro è costituita da un nome del parametro e da un tipo di dati. n è un segnaposto che indica definizioni di parametro aggiuntive. n è un segnaposto che indica definizioni di parametro aggiuntive. Ogni parametro specificato nell'istruzione deve essere definito in @params. Se l'istruzione Transact-SQL o il batch nell'istruzione non contiene parametri, @params non è necessario. NULL è il valore predefinito per questo parametro.

Valore restituito

0 indica l'esito positivo. Qualsiasi altro elemento indica un errore.

Set di risultati

sp_describe_parameter_encryption restituisce due set di risultati:

  • Il set di risultati che descrive le chiavi crittografiche configurate per le colonne di database, i parametri dell'istruzione Transact-SQL specificata corrispondono.

  • Set di risultati che descrive il modo in cui devono essere crittografati determinati parametri. Questo set di risultati fa riferimento alle chiavi descritte nel primo set di risultati.

Ogni riga del primo set di risultati descrive una coppia di chiavi: una chiave di crittografia della colonna crittografata e la chiave master della colonna corrispondente.

Nome colonna Tipo di dati Descrizione
column_encryption_key_ordinal int ID della riga nel set di risultati.
database_id int ID del database.
column_encryption_key_id int ID chiave di crittografia della colonna.

Nota: questo ID indica una riga nella vista del catalogo sys.column_encryption_keys .
column_encryption_key_version int Riservato a un uso futuro. Attualmente contiene sempre 1.
column_encryption_key_metadata_version binary(8) Timestamp che rappresenta l'ora di creazione della chiave di crittografia della colonna.
column_encryption_key_encrypted_value varbinary(4000) Valore crittografato della chiave di crittografia della colonna.
column_master_key_store_provider_name sysname Nome del provider per l'archivio chiavi che contiene la chiave cmk, utilizzata per produrre il valore crittografato della chiave di crittografia della colonna.
column_master_key_path nvarchar(4000) Percorso della chiave del cmk, usato per produrre il valore crittografato della chiave di crittografia della colonna.
column_encryption_key_encryption_algorithm_name sysname Nome dell'algoritmo di crittografia utilizzato per produrre il valore di crittografia della chiave di crittografia della colonna.

Ogni riga del secondo set di risultati contiene i metadati di crittografia per un parametro.

Nome colonna Tipo di dati Descrizione
parameter_ordinal int ID della riga nel set di risultati.
parameter_name sysname Nome di uno dei parametri specificati nell'argomento @params .
column_encryption_algorithm tinyint Codice che indica l'algoritmo di crittografia configurato per la colonna a cui corrisponde il parametro . Il valore attualmente supportato è 2 per AEAD_AES_256_CBC_HMAC_SHA_256.
column_encryption_type tinyint Codice che indica il tipo di crittografia configurato per la colonna, il parametro corrisponde a . I valori supportati sono:

0 - testo non crittografato (la colonna non è crittografata)
1 - Crittografia deterministica
2 - crittografia casuale.
column_encryption_key_ordinal int Codice della riga nel primo set di risultati. La riga a cui si fa riferimento descrive la chiave di crittografia della colonna configurata per la colonna, il parametro corrisponde a .
column_encryption_normalization_rule_version tinyint Numero di versione dell'algoritmo di normalizzazione del tipo.

Osservazioni:

Un driver client di SQL Server, che supporta Always Encrypted, chiama sp_describe_parameter_encryption automaticamente per recuperare i metadati di crittografia per le query con parametri rilasciate dall'applicazione. Il driver usa quindi i metadati di crittografia per crittografare i valori dei parametri che corrispondono alle colonne di database protette con Always Encrypted. Sostituisce i valori dei parametri in testo non crittografato inviati dall'applicazione, con i valori dei parametri crittografati, prima di inviare la query al motore di database.

Autorizzazioni

Richiedere le VIEW ANY COLUMN ENCRYPTION KEY DEFINITION autorizzazioni e VIEW ANY COLUMN MASTER KEY DEFINITION nel database.

Esempi

Nell'esempio seguente viene troncato il valore per ENCRYPTED_VALUE, a scopo di visualizzazione.

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

Ecco il primo set di risultati:

Colonna Valore
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

Ecco il secondo set di risultati:

Colonna Valore
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