我已经在SQL Server 2008数据库中签名了模块。如果有人改变了签名的模块(proc或触发器),我想打印信息消息,必须重新签署程序并打印TSQL代码才能这样做(有适当的权利)。
如何以及最好的方法是什么?
DDL触发器似乎不适合这种需要,因为内部触发器模块已经被改变,并且认为我无法确定它是否之前已经签名。
答案 0 :(得分:1)
知道这是一个老问题,但使用签名SP还有其他原因。以下是问题的答案'如何确定SP是否已签名':
IF EXISTS (
SELECT * FROM sys.crypt_properties
WHERE (crypt_type = 'SPVC') AND
(major_id = OBJECT_ID(N'[dbo_or_schema].[WhateverYourSPIsCalled]')))
-- <stuff to do when SP is signed>
ELSE -- <stuff to do when SP is not signed>
感谢Remus的工作(见其他答案的评论)。
答案 1 :(得分:0)
签名的整个想法是,某人授权审核了模块(检查了代码),然后使用他的权限对模块进行签名。更改模块需要相同的授权人员再次检查模块,检查一致性并重新签名。自动执行此过程几乎违背了代码签名的目的,只需让每个人都能使用sysadmin并将其称为一天。