Partilhar via


VERIFYSIGNEDBYCERT (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Testa se dados assinados digitalmente foram alterados desde que foram assinados.

Convenções de sintaxe de 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 que foi assinados com um certificado.

assinatura
É a assinatura que foi anexada aos dados assinados. assinatura é 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 da chave assimétrica especificada e compara o valor descriptografado a um hash de MD5 dos dados computados recentemente. 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 [AdventureWorks2022].[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 [AdventureWorks2022].[SignedData04]   
WHERE VerifySignedByCert( Cert_Id( 'Shipping04' ), Data,   
    DataSignature ) = 1   
AND Description = N'data signed by certificate ''Shipping04''';  
GO  

Consulte Também

CERT_ID (Transact-SQL)
SIGNBYCERT (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL)
Hierarquia de criptografia