適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
デジタル署名付きデータが、署名された後に変更されているかどうかをテストします。
構文
VerifySignedByCert( Cert_ID , signed_data , signature )
引数
Cert_ID
データベース内の証明書の ID を指定します。
Cert_ID は int です。
signed_data
nvarchar、char、varchar、または nchar 型の変数であり、証明書で署名されたデータを格納します。
signature
署名付きデータにアタッチされた署名を指定します。
signature は varbinary です。
戻り値の型
int
署名付きデータが変更されていない場合は 1、変更されている場合は 0 が返されます。
注釈
VerifySignedBycert 指定された証明書の公開キーを使用して、データの署名を復号化し、データの新しく計算された MD5 ハッシュを復号化された値と比較します。 値が一致すると、その署名が有効であることが確認されます。
アクセス許可
証明書に対する VIEW DEFINITION 権限が必要です。
例
A. 署名付きデータが変更されていないことを確認する
次の例では、Signed_Data 内の情報が、Shipping04 という証明書を使用して署名された後に変更されているかどうかをテストします。 署名は DataSignature に格納されています。 証明書 Shipping04 を Cert_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)
証明書を作成する (Transact-SQL)
ALTER証明書(Transact-SQL)
ドロップ証明書(Transact-SQL)
バックアップ証明書 (Transact-SQL)
暗号化階層