sys.fn_check_object_signatures (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