Share via


VERIFYSIGNEDBYCERT (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

測試數位簽署的資料在簽署之後是否已經變更。

Transact-SQL 語法慣例

Syntax

VerifySignedByCert( Cert_ID , signed_data , signature )  

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

Cert_ID
這是資料庫中憑證的識別碼。 Cert_IDint

signed_data
nvarcharcharvarcharnchar 類型的變數,其中包含已經使用憑證加以簽署的資料。

簽章
這是附加在已簽署資料中的簽章。 signaturevarbinary

傳回型別

int

如果已簽署的資料不變,則傳回 1,否則傳回 0。

備註

VerifySignedBycert 會使用指定憑證的公開金鑰解密資料的簽章,並比較解密值與新計算的資料 MD5 雜湊。 如果值相符,簽章將確認為有效。

權限

需要憑證的 VIEW DEFINITION 權限。

範例

A. 驗證簽署的資料未遭竄改

下列範例會測試 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 CERTIFICATE (Transact-SQL)
加密階層