VerifySignedByCert (Transact-SQL)
Testa se dados assinados digitalmente foram alterados desde sua assinatura.
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 [AdventureWorks2008R2].[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 [AdventureWorks2008R2].[SignedData04]
WHERE VerifySignedByCert( Cert_Id( 'Shipping04' ), Data,
DataSignature ) = 1
AND Description = N'data signed by certificate ''Shipping04''';
GO