Share via


VerifySignedByCert (Transact-SQL)

Testa se dados assinados digitalmente foram alterados desde sua assinatura.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

VerifySignedByCert( Cert_ID , signed_data , signature )

Argumentos

  • Cert_ID
    É a ID de um certificado no banco de dados. Cert_ID é int.

  • signed_data
    É uma variável do tipo nvarchar, char, varchar ou nchar que contém dados assinados com um certificado.

  • signature
    É a assinatura que foi anexada aos dados assinados. A signature é varbinary.

Tipos de retorno

int

Retorna 1 quando os dados assinados estão inalterados, caso contrário, retorna 0.

Comentários

VerifySignedBycert descriptografa a assinatura dos dados usando a chave pública do certificado especificado e compara o valor descriptografado a um hash de MD5 computado recentemente dos dados. Se os valores corresponderem, a assinatura será confirmada como válida.

Permissões

Exige a permissão VIEW DEFINITION no certificado.

Exemplos

A. Verificando se os dados assinados não foram violados

O exemplo a seguir testa se as informações em Signed_Data foram alteradas desde que foram assinadas com o certificado chamado Shipping04. A assinatura é armazenada em DataSignature. O certificado, Shipping04, é passado para Cert_ID, que retorna a ID do certificado no banco de dados. Se VerifySignedByCert retornar 1, a assinatura estará correta. Se VerifySignedByCert retornar 0, os dados em Signed_Data não serão os que foram usados para gerar DataSignature. Neste caso, ou Signed_Data foi alterado desde que foi assinado ou Signed_Data foi assinado com um certificado diferente.

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

B. Retornando somente registros que tenham uma assinatura válida

Esta consulta retorna somente os registros que não foram alterados desde que foram assinados com o certificado Shipping04.

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