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