不安全的程序集不是 运行

Trustworthy is ON with UNSAFE assemblies not running

我只是在内部测试一些东西,现在 TRUSTWORTHY 设置为 ON 安全风险。

  1. 不过我想知道,如果 TRUSTWORTHYON,如果 UNSAFE 程序集已签名并且其中有一个 .pfx 密钥文件,它会停止工作吗?
  2. 不确定证书是否是几年前创建的,或者证书或密钥是否会过期?

此问题涉及:A SQL CLR Assembly set to UNSAFE with a key is no longer working

  1. 如果 TRUSTWORTHYON,则不需要模块签名。

    此外,程序集不包含 .pfx 文件。 pfx 文件是一个包含私钥的 password-protected 文件。如果使用证书(或 snk / 非对称密钥)签名,程序集将包含用于验证的 public 密钥。

  2. 不,您不必担心证书的到期日期(尤其是在仅验证已签名的内容时,这就是这里发生的全部内容)。

    如果您想知道程序集是否已通过 strong-name 密钥 (snk) / 非对称密钥签名,只需查看程序集属性(例如 SELECT name, clr_name FROM sys.assemblies;)。如果“publickeytoken”(在 clr_name 中)有值(即不是“null”),则程序集已 strongly-named(即使用非对称密钥签名)。

    如果您想知道程序集是否已被证书签名,只需尝试从该程序集创建证书:

    CREATE CERTIFICATE [_TempTest] FROM ASSEMBLY [Microsoft.SqlServer.Types];
    -- DROP CERTIFICATE [_TempTest];
    

    如果程序集是用证书签名的,CREATE 语句将会成功。然后,删除证书。

    如果程序集未使用证书签名,您将收到以下错误:

    Msg 15208, Level 16, State 31, Line XXXXX
    The certificate, asymmetric key, or private key file is not valid or
      does not exist; or you do not have permissions for it.
    

    请注意,可以使用非对称密钥一个或多个证书对程序集进行签名。