VerifySignedByCert (Transact-SQL)
Verifica se i dati con firma digitale sono stati modificati dopo la firma.
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