Compartilhar via


VERIFICARASSINADOPOR cert (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureBanco de dados SQL no Microsoft Fabric

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)
CRIAR CERTIFICADO (Transact-SQL)
ALTER CERTIFICATE (Transact-SQL)
CERTIFICADO DE DESISTÊNCIA (Transact-SQL)
CERTIFICADO DE BACKUP (Transact-SQL)
Hierarquia de criptografia