Compartir a través de


VERIFYSIGNEDBYCERT (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Comprueba si se han cambiado los datos firmados digitalmente desde que se firmaron.

Convenciones de sintaxis de Transact-SQL

Sintaxis

VerifySignedByCert( Cert_ID , signed_data , signature )  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

Cert_ID
Es el identificador de un certificado de la base de datos. Cert_ID es int.

signed_data
Es una variable de tipo nvarchar, char, varchar o nchar que contiene los datos que se han firmado con un certificado.

firma
Es la firma adjunta a los datos firmados. signature es varbinary.

Tipos de valor devuelto

int

Devuelve 1 cuando no se han cambiado los datos firmados; de lo contrario, devuelve 0.

Comentarios

VerifySignedBycert descifra la firma de los datos utilizando la clave pública del certificado especificado y compara el valor descifrado con un hash MD5 de los datos calculado recientemente. Si los valores coinciden, se confirma que la firma es válida.

Permisos

Requiere el permiso VIEW DEFINITION en el certificado.

Ejemplos

A. Comprobar que los datos firmados no se han manipulado

En el siguiente ejemplo se comprueba si la información en Signed_Data ha cambiado desde que se firmó con el certificado denominado Shipping04. La firma se almacena en DataSignature. El certificado, Shipping04, se pasa a Cert_ID, que devuelve el identificador del certificado en la base de datos. Si VerifySignedByCert devuelve 1, la firma es correcta. Si VerifySignedByCert devuelve 0, los datos de Signed_Data no son los datos que se usaron para generar DataSignature. En este caso, Signed_Data se ha cambiado desde que se firmó o Signed_Data se firmó con otro certificado.

SELECT Data, VerifySignedByCert( Cert_Id( 'Shipping04' ),  
    Signed_Data, DataSignature ) AS IsSignatureValid  
FROM [AdventureWorks2022].[SignedData04]   
WHERE Description = N'data signed by certificate ''Shipping04''';  
GO  

B. Devolver solo los registros que tienen una firma válida

Esta consulta solo devuelve los registros que no han cambiado desde que se firmaron con el certificado Shipping04.

SELECT Data FROM [AdventureWorks2022].[SignedData04]   
WHERE VerifySignedByCert( Cert_Id( 'Shipping04' ), Data,   
    DataSignature ) = 1   
AND Description = N'data signed by certificate ''Shipping04''';  
GO  

Vea también

CERT_ID (Transact-SQL)
SIGNBYCERT (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL)
Jerarquía de cifrado