VERIFYSIGNEDBYCERT (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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

Transact-SQL 構文表記規則

構文

VerifySignedByCert( Cert_ID , signed_data , signature )  

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

Cert_ID
データベース内の証明書の ID を指定します。 Cert_IDint です。

signed_data
nvarcharcharvarchar、または nchar 型の変数であり、証明書で署名されたデータを格納します。

signature
署名付きデータにアタッチされた署名を指定します。 signaturevarbinary です。

戻り値の型

int

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

注釈

VerifySignedBycert 指定された証明書の公開キーを使用して、データの署名を復号化し、データの新しく計算された MD5 ハッシュを復号化された値と比較します。 値が一致すると、その署名が有効であることが確認されます。

アクセス許可

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

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

次の例では、Signed_Data 内の情報が、Shipping04 という証明書を使用して署名された後に変更されているかどうかをテストします。 署名は DataSignature に格納されています。 証明書 Shipping04Cert_ID に渡すと、データベース内の証明書の 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 CERTIFICATE (Transact-SQL)
暗号化階層