sys.fn_check_object_signatures (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例Analytics Platform System (PDW)

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

Transact-SQL 语法约定

语法

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

参数

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

  • “证书”

  • “非对称密钥”

@sysname

{ @thumbprint }
用来对密钥进行加密的证书的 SHA-1 哈希,或用来对密钥进行加密的非对称密钥的 GUID。 @指纹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  
  

另请参阅

IS_OBJECTSIGNED (Transact-SQL)