VerifySignedByCert (Transact-SQL)

Verifica se i dati con firma digitale sono stati modificati dopo la firma.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

VerifySignedByCert( Cert_ID , signed_data , signature )

Argomenti

  • Cert_ID
    ID di un certificato nel database. Cert_ID è di tipo int.

  • signed_data
    Variabile di tipo nvarchar, char, varchar o nchar contenente i dati firmati con un certificato.

  • signature
    Firma allegata ai dati firmati. signature è di tipo varbinary.

Tipi restituiti

int

Restituisce 1 se i dati firmati risultano invariati; in caso contrario, restituisce 0.

Osservazioni

VerifySignedBycert consente di decrittografare la firma dei dati utilizzando la chiave pubblica del certificato specificato e di confrontare il valore decrittografato con un nuovo hash MD5 dei dati calcolato. Se i valori corrispondono, viene confermata la validità della firma.

Autorizzazioni

È richiesta l'autorizzazione VIEW DEFINITION per il certificato.

Esempi

A. Verifica che i dati firmati non siano stati alterati

Nell'esempio seguente viene verificato se le informazioni incluse in Signed_Data sono state modificate dopo la firma tramite il certificato denominato Shipping04. La firma viene archiviata in DataSignature. Il certificato Shipping04 viene passato a Cert_ID, che restituisce l'ID del certificato nel database. Se VerifySignedByCert restituisce 1, la firma è corretta. Se invece VerifySignedByCert restituisce 0, i dati in Signed_Data non corrispondono ai dati utilizzati per generare DataSignature. In questo caso, i dati in Signed_Data sono stati modificati dopo la firma oppure la firma di Signed_Data è stata eseguita con un certificato diverso.

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

B. Restituzione solo dei record che dispongono di una firma valida

La query restituisce solo i record che non hanno subito modifiche dopo essere stati firmati utilizzando il certificato Shipping04.

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