Поделиться через


VERIFYSIGNEDBYCERT (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Проверяет, изменялись ли данные с цифровой подписью с момента подписи.

Соглашения о синтаксисе Transact-SQL

Синтаксис

VerifySignedByCert( Cert_ID , signed_data , signature )  

Аргументы

Cert_ID
Идентификатор сертификата в базе данных. Аргумент Cert_ID имеет тип int.

signed_data
Переменная типа nvarchar, char, varchar или nchar, содержащая данные, которые были подписаны с помощью сертификата.

signature
Это подпись, которая была прикреплена к подписанным данным. Аргумент signature имеет тип varbinary.

Типы возвращаемых данных

int

Возвращает 1, если подписанные данные не были изменены, и 0 — в противном случае.

Замечания

VerifySignedBycert расшифровывает подпись данных с помощью открытого ключа указанного сертификата и сравнивает расшифрованное значение с новым хэшем MD5, вычисленным для данных. Если значения совпадают, подтверждается допустимость подписи.

Разрешения

Требует разрешения VIEW DEFINITION на сертификат.

Примеры

А. Проверка подписанных данных на предмет подделки

В следующем примере данные, содержащиеся в Signed_Data, тестируются на предмет изменения с момента подписи с сертификатом под именем Shipping04. Подпись хранится в DataSignature. Сертификат Shipping04 передается в Cert_ID, которая возвращает идентификатор сертификата в базу данных. Если VerifySignedByCert возвращает 1, подпись верна. Если же VerifySignedByCert возвращает 0, данные в Signed_Data не являются теми данными, которые использовались для формирования DataSignature. В этом случае либо Signed_Data были изменены с момента подписи, либо Signed_Data были подписаны с другим сертификатом.

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

B. Возвращение только записей, имеющих действительную подпись

Этот запрос возвращает только те записи, которые не менялись с тех пор, как они были подписаны с использованием сертификата Shipping04.

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

См. также

CERT_ID (Transact-SQL)
SIGNBYCERT (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
ALTER CERTIFICATE (Transact-SQL)
DROP CERTIFICATE (Transact-SQL)
СЕРТИФИКАТ BACKUP (Transact-SQL)
Иерархия средств шифрования