sys.fn_check_object_signatures (Transact-SQL)

返回所有可签名对象的列表,并指示对象是否由指定证书或非对称密钥签名。如果对象是由指定证书或非对称密钥签名,则还会返回该对象的签名是否有效。

主题链接图标Transact-SQL 语法约定

语法

fn_ check_object_signatures ( 
    { '@class' } , { @thumbprint } 
    ) 

参数

  • { '@class' }
    标识提供的指纹类型:

    • “证书”

    • “非对称密钥”

    @class 是 sysname。

  • { @thumbprint }
    用来对密钥进行加密的证书的 SHA-1 哈希,或用来对密钥进行加密的非对称密钥的 GUID。@thumbprint 是 varbinary(20)。

返回的表

下表列出了 fn_check_object_signatures 返回的列。

类型

说明

type

nvarchar(120)

返回类型说明或程序集。

entity_id

int

返回要计算的对象的对象 ID。

is_signed

int

当对象不是由提供的指纹签名时返回 0。当对象由提供的指纹签名时返回 1。

is_signature_valid

int

当 is_signed 值为 1 且签名无效时,返回 0。签名有效则返回 1。

当 is_signed 值为 0 时,始终返回 0。

注释

使用 fn_check_object_signatures 确认恶意用户未篡改对象。

权限

要求对证书或非对称密钥拥有 VIEW DEFINITION 权限。

示例

下面的示例查找 master 数据库的架构签名证书,对于该架构签名证书签名的具有有效签名的对象,返回值为 1 的 is_signed 和值为 1 的 is_signature_valid。

USE master
-- Declare a variable to hold the thumbprint.
DECLARE @thumbprint varbinary(20) ;
-- Populate the thumbprint variable with the master database schema signing certificate.
SELECT @thumbprint = thumbprint 
FROM sys.certificates 
WHERE name LIKE '%SchemaSigningCertificate%' ;
-- Evaluates the objects signed by the schema signing certificate
SELECT type, entity_id, OBJECT_NAME(entity_id) AS [object name], is_signed, is_signature_valid
FROM sys.fn_check_object_signatures ('certificate', @thumbprint) ;
GO