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


VerifySignedByCert (Transact-SQL)

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

Значок ссылки на разделСоглашения о синтаксисе в Transact-SQL

Синтаксис

VerifySignedByCert( Cert_ID , signed_data , signature )

Аргументы

  • Cert_ID
    Идентификатор сертификата в базе данных. int
  • signed_data
    Переменная типа nvarchar, char, varchar, или nchar, содержащая данные, которые были подписаны с сертификатом.
  • signature
    Подпись, прикрепленная к подисанным данным. varbinary.

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

int

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

Замечания

VerifySignedByCert извлекает подпись из ранее подписанных данных с применением сертификата, хранимого в базе данных. VerifySignedByCert сравнивает новую производную подпись с подписью, прикрепленной к данным при их получении. Совпадение извлеченной подписи и подписи, которая была прикреплена к подписанным данным, доказывает, что данные не изменялись с момента, когда они были подписаны. Вычисление подписи базируется на всех символах проверяемого модуля, включая начальные и конечные пробелы, символы возвраты каретки и конца строки.

Разрешения

Требует разрешения 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 [AdventureWorks].[SignedData04] 
WHERE Description = N'data signed by certificate ''Shipping04''';
GO

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

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

SELECT Data FROM [AdventureWorks].[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 CERTIFICATE (Transact-SQL)

Другие ресурсы

Иерархия средств шифрования

Справка и поддержка

Получение помощи по SQL Server 2005