Condividi tramite


VERIFYSIGNEDBYCERT (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

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

Convenzioni relative alla 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 decrittografa la firma dei dati usando la chiave pubblica del certificato specificato e confronta 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

R. 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 [AdventureWorks2022].[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 [AdventureWorks2022].[SignedData04]   
WHERE VerifySignedByCert( Cert_Id( 'Shipping04' ), Data,   
    DataSignature ) = 1   
AND Description = N'data signed by certificate ''Shipping04''';  
GO  

Vedi anche

CERT_ID (Transact-SQL)
SIGNBYCERT (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL)
Gerarchia di crittografia