SQL Server 2008 データベースのモジュールに署名しました。誰かが署名されたモジュール (proc またはトリガー) を変更した場合に備えて、情報メッセージを出力したいのですが、そのためにはプロシージャに再署名し、TSQL コードを出力する必要があります (適切な権利があります)。
それを行うための最良の方法は何ですか?
DDLトリガーは、トリガーモジュール内で既に変更されており、以前に署名されたかどうかを確認できないと思われるため、このニーズには適していないようです。
SQL Server 2008 データベースのモジュールに署名しました。誰かが署名されたモジュール (proc またはトリガー) を変更した場合に備えて、情報メッセージを出力したいのですが、そのためにはプロシージャに再署名し、TSQL コードを出力する必要があります (適切な権利があります)。
それを行うための最良の方法は何ですか?
DDLトリガーは、トリガーモジュール内で既に変更されており、以前に署名されたかどうかを確認できないと思われるため、このニーズには適していないようです。
署名の全体的な考え方は、承認された誰かがモジュールをレビューし(コードを検査し)、その権限を使用してモジュールに署名したということです。モジュールを変更するには、同じ権限のある個人がモジュールを再度確認し、適合性を確認して再署名する必要があります。このプロセスを自動化すると、コード署名の目的がほとんど損なわれます。全員をsysadminにして、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のおかげでこれを解決しました(他の回答のコメントを参照)。