VerifySignedByCert (Transact-SQL)

デジタル署名付きデータが、署名された後に変更されているかどうかをテストします。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

VerifySignedByCert( Cert_ID , signed_data , signature )

引数

  • Cert_ID
    データベース内の証明書の ID を指定します。 int
  • signed_data
    証明書を使用して署名されたデータを含む、nvarcharcharvarchar、または nchar 型の変数を指定します。
  • signature
    署名付きデータにアタッチされた署名を指定します。 varbinary.

戻り値の型

int

署名付きデータが変更されていない場合は 1、変更されている場合は 0 が返されます。

解説

VerifySignedByCert は、データベース内に格納されている証明書を使用して署名済みのデータから署名を取得し、新しく取得された署名と、データの取得時に署名付きデータにアタッチされた署名とを比較します。新しく取得された署名が、署名付きデータにアタッチされていた署名と同じ場合、そのデータは署名後に変更されなかったことがわかります。署名の確認は、先頭の空白、末尾の空白、キャリッジ リターン、改行文字など、対象モジュール内のすべての文字を比較して行われます。

権限

証明書に対する VIEW DEFINITION 権限が必要です。

A. 署名付きデータが変更されていないことを確認する

次の例では、Signed_Data 内の情報が、Shipping04 という証明書を使用して署名された後に変更されているかどうかをテストします。署名は DataSignature に格納されています。証明書 Shipping04Cert_ID に渡すと、データベース内の証明書の ID が返されます。VerifySignedByCert で 1 が返された場合、署名は正しいことになります。VerifySignedByCert で 0 が返された場合、Signed_Data 内のデータは、DataSignature の生成に使用されたデータではありません。この場合、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

B. 有効な署名が含まれるレコードのみを返す

次のクエリでは、証明書 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 の参考資料の入手