私はいくつかの証明書( CREATE CERTIFICATE を介して)および非対称キー( CREATE ASYMMETRIC KEY を介して)を作成し、それらを使用してユーザー定義のさまざまなストアドプロシージャに署名し、副署名しました関数(UDF)、トリガー、およびアセンブリ( ADD SIGNATURE を使用)。しかし今、私はどの証明書や非対称キーがどの特定のモジュールに署名するために使用されたかを見つける必要があります。
最も簡単な方法は、証明書/非対称キーと署名済みモジュールの関係、および使用法(つまり、署名または副署名)を保持する sys.crypt_properties カタログビューを使用しているようです。署名されているモジュールを見つける方法は他にもいくつかありますが、署名と反対署名を示すものはありません。
SELECT SCHEMA_NAME(so.[schema_id]) AS [SchemaName],
so.[name] AS [ObjectName],
so.[type_desc] AS [ObjectType],
---
scp.crypt_type_desc AS [SignatureType],
ISNULL(sc.[name], sak.[name]) AS [CertOrAsymKeyName],
---
scp.thumbprint
FROM sys.crypt_properties scp
INNER JOIN sys.objects so
ON so.[object_id] = scp.[major_id]
LEFT JOIN sys.certificates sc
ON sc.thumbprint = scp.thumbprint
LEFT JOIN sys.asymmetric_keys sak
ON sak.thumbprint = scp.thumbprint
WHERE so.[type] <> 'U'
ORDER BY [SchemaName], [ObjectType], [ObjectName], [CertOrAsymKeyName];
私のテストDBでは、このクエリは以下を返します。
Schema ObjectName ObjectType SignatureType CertOrAsymKeyName thumbprint
------ ---------- ---------- ------------- ----------------- ----------
dbo fnPaymentCalc SQL_SCALAR_FUNCTION COUNTER SIGNATURE BY ASYMMETRIC KEY KeyTest1 0x2333B2FA6AA8004E
dbo ModuleTest2 SQL_STORED_PROCEDURE SIGNATURE BY CERTIFICATE CrossDatabaseCert 0x49BA174584C78C878D923690C15898A809CBACDF
dbo TestSig SQL_STORED_PROCEDURE SIGNATURE BY CERTIFICATE bob 0x778B3DB4ED981FC27AB301ACE7A1AB8424F64792
dbo TestSig SQL_STORED_PROCEDURE SIGNATURE BY ASYMMETRIC KEY KeyTest1 0x2333B2FA6AA8004E