Compartir vía


sp_describe_parameter_encryption (Transact-SQL)

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL Database Azure SQL Managed Instance

Analiza la instrucción Transact-SQL especificada y sus parámetros para determinar qué parámetros corresponden a columnas de base de datos protegidas mediante la característica Always Encrypted. Devuelve los metadatos de cifrado de los parámetros que corresponden a columnas cifradas.

Sintaxis

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

Argumentos

[ @tsql = ] 'tsql'

Una o varias instrucciones Transact-SQL. @tsql puede ser nvarchar(n) o nvarchar(max).

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

@params proporciona una cadena de declaración para los parámetros de @tsql, que es similar a sp_executesql. Los parámetros pueden ser nvarchar(n) o nvarchar(max).

Cadena que contiene las definiciones de todos los parámetros incrustados en transact-SQL_batch. La cadena debe ser una constante Unicode o una variable Unicode. Cada definición de parámetro se compone de un nombre de parámetro y un tipo de datos. n es un marcador de posición que indica definiciones de parámetros adicionales. n es un marcador de posición que indica definiciones de parámetros adicionales. Todos los parámetros especificados en la instrucción deben definirse en @params. Si la instrucción Transact-SQL o el lote de la instrucción no contiene parámetros, no se requiere @params . NULL es el valor predeterminado de este parámetro.

Valor devuelto

0 indica que se ha realizado correctamente. Cualquier otra cosa indica un error.

Conjunto de resultados

sp_describe_parameter_encryption devuelve dos conjuntos de resultados:

  • El conjunto de resultados que describe las claves criptográficas configuradas para las columnas de base de datos, los parámetros de la instrucción Transact-SQL especificada corresponden a.

  • Conjunto de resultados que describe cómo se deben cifrar parámetros concretos. Este conjunto de resultados hace referencia a las claves descritas en el primer conjunto de resultados.

Cada fila del primer conjunto de resultados describe un par de claves: una clave de cifrado de columna cifrada y su clave maestra de columna correspondiente (CMK).

Nombre de la columna Tipo de datos Descripción
column_encryption_key_ordinal int Id. de la fila en el conjunto de resultados.
database_id int Id. de la base de datos.
column_encryption_key_id int Identificador de clave de cifrado de columna.

Nota: este identificador indica una fila en la vista de catálogo de sys.column_encryption_keys .
column_encryption_key_version int Reservado para uso futuro. Actualmente, siempre contiene 1.
column_encryption_key_metadata_version binary(8) Marca de tiempo que representa la hora de creación de la clave de cifrado de columna.
column_encryption_key_encrypted_value varbinary(4000) Valor cifrado de la clave de cifrado de columna.
column_master_key_store_provider_name sysname Nombre del proveedor del almacén de claves que contiene la CMK, que se usó para generar el valor cifrado de la clave de cifrado de columna.
column_master_key_path nvarchar(4000) Ruta de acceso de la clave de CMK, que se usó para generar el valor cifrado de la clave de cifrado de columna.
column_encryption_key_encryption_algorithm_name sysname Nombre del algoritmo de cifrado usado para generar el valor de cifrado de la clave de cifrado de columna.

Cada fila del segundo conjunto de resultados contiene metadatos de cifrado para un parámetro.

Nombre de la columna Tipo de datos Descripción
parameter_ordinal int Identificador de la fila del conjunto de resultados.
parameter_name sysname Nombre de uno de los parámetros especificados en el argumento @params .
column_encryption_algorithm tinyint Código que indica el algoritmo de cifrado configurado para la columna a la que corresponde el parámetro . El valor admitido actualmente es 2 para AEAD_AES_256_CBC_HMAC_SHA_256.
column_encryption_type tinyint Código que indica el tipo de cifrado configurado para la columna, el parámetro corresponde. Los valores admitidos son:

0 - texto no cifrado (la columna no está cifrada)
1 - cifrado determinista
2 : cifrado aleatorio.
column_encryption_key_ordinal int Código de la fila del primer conjunto de resultados. La fila a la que se hace referencia describe la clave de cifrado de columna configurada para la columna, el parámetro corresponde.
column_encryption_normalization_rule_version tinyint Número de versión del algoritmo de normalización de tipos.

Comentarios

Un controlador cliente de SQL Server, compatible con Always Encrypted, llama sp_describe_parameter_encryption automáticamente a para recuperar metadatos de cifrado para las consultas con parámetros emitidas por la aplicación. A continuación, el controlador usa los metadatos de cifrado para cifrar los valores de los parámetros que corresponden a las columnas de base de datos protegidas con Always Encrypted. Sustituye los valores de parámetro de texto no cifrado enviados por la aplicación, con los valores de parámetro cifrados, antes de enviar la consulta al motor de base de datos.

Permisos

Solicite los permisos VIEW ANY COLUMN ENCRYPTION KEY DEFINITION y VIEW ANY COLUMN MASTER KEY DEFINITION en la base de datos.

Ejemplos

En el ejemplo siguiente se trunca el valor para ENCRYPTED_VALUE, con fines de presentación.

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

Este es el primer conjunto de resultados:

Columna Valor
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

Este es el segundo conjunto de resultados:

Columna Valor
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