VerifySignedByCert(Transact-SQL)
디지털 서명된 데이터가 서명된 후 변경되었는지 여부를 테스트합니다.
구문
VerifySignedByCert( Cert_ID , signed_data , signature )
인수
- Cert_ID
데이터베이스에 있는 인증서의 ID입니다. int
- signed_data
인증서로 서명된 데이터를 포함하는 nvarchar, char, varchar 또는 nchar 형식의 변수입니다.
- signature
서명된 데이터에 첨부된 서명입니다. varbinary.
주의
VerifySignedByCert 는 데이터베이스에 저장된 인증서를 사용하여 이전에 서명된 데이터에서 서명을 파생시킵니다. VerifySignedByCert 는 새로 파생된 서명을 검색 시 서명된 데이터에 연결된 서명과 비교합니다. 새로 파생된 서명이 서명된 데이터에 첨부된 서명과 동일하면 데이터가 서명된 후 변경되지 않은 것입니다. 서명 계산은 선행 공백, 후행 공백, 캐리지 리턴 및 줄 바꿈을 포함하여 확인 중인 모듈의 모든 문자를 기준으로 이루어집니다.
사용 권한
인증서에 대한 VIEW DEFINITION 권한이 필요합니다.
반환 형식
int
서명된 데이터가 변경되지 않았으면 1을, 변경되었으면 0을 반환합니다.
예
1. 서명된 데이터가 변경되지 않았는지 확인
다음 예에서는 Signed_Data
의 정보가 Shipping04
라는 인증서로 서명된 후 변경되었는지 테스트합니다. 서명은 DataSignature
에 저장됩니다. 인증서 Shipping04
는 데이터베이스 내의 인증서 ID를 반환하는 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
2. 유효한 서명을 가진 레코드만 반환
이 쿼리에서는 인증서 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)