在更改之前检查模块上的签名

时间:2012-06-28 07:55:13

标签: sql-server sql-server-2008 sql-server-2005

我已经在SQL Server 2008数据库中签名了模块。如果有人改变了签名的模块(proc或触发器),我想打印信息消息,必须重新签署程序并打印TSQL代码才能这样做(有适当的权利)。

如何以及最好的方法是什么?

DDL触发器似乎不适合这种需要,因为内部触发器模块已经被改变,并且认为我无法确定它是否之前已经签名。

2 个答案:

答案 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并将其称为一天。