【问题标题】:What is a stored procedure with a padlock icon in SQL Server 2005?SQL Server 2005 中带有挂锁图标的存储过程是什么?
【发布时间】:2009-06-22 14:29:03
【问题描述】:

我在我正在管理的一个数据库中看到一些存储过程,它们具有常规的存储过程图标,但旁边有一个小挂锁。
我看到的不同之处在于我无法“修改”它们,如果我尝试编写脚本,它会说:

文本已加密。

这是因为这些是 CLR 存储过程吗?
它们是“常规”程序,但以某种方式加密/保护吗?
有没有办法获取这些代码(T-SQL 或 IL)?

【问题讨论】:

  • 当我创建一个 CLR 程序时,它有挂锁图标

标签: stored-procedures sql-server-2005 locking


【解决方案1】:

挂锁表示存储过程已使用WITH ENCRYPTION 提示加密(有关详细信息,请参阅 BOL 中的CREATE PROC)。

意味着它是一个 CLR 存储过程。

Here's SQL Server Magazine 文章,介绍如何解密使用WITH ENCRYPTION 提示加密的对象。

也有第三方工具可以做同样的事情 - 本地存储过程加密并不意味着是一个强大的加密级别。

编辑:Here 是另一个,但我没有在 SQL Server 2005 或更高版本上测试过。

【讨论】:

    【解决方案2】:

    除了加密,也意味着你没有VIEW DEFINITION权限,所以看不到存储过程的代码。

    【讨论】:

      【解决方案3】:

      挂锁仅表示它们已加密 - 与它们是 CLR 无关。无论是 CLR / T-SQL,都无法查看源代码。

      【讨论】:

        【解决方案4】:

        您正在查看的 SP 是 CLR 类型的 SP。我刚刚做了一个成功的 POC。 您只需通过此链接:

        http://www.codeproject.com/Articles/37298/CLR-Stored-Procedure-and-Creating-It-Step-by-Step

        【讨论】:

          【解决方案5】:

          这些是使用WITH ENCRYPTION 选项创建的存储过程(有关详细信息,请参阅MSDN Documentation on CREATE PROCEDURE)。这意味着您看不到存储过程的代码。

          可以解密这样的存储过程,但是加密背后的想法是你不能这样做,这并不简单——绝对不要在生产服务器上这样做!如果您确实需要查看存储过程文本,那么您最好先向编写它的人询问未加密版本(您至少可以尝试)。

          加密存储过程的一个副作用是无法查看这些对象的执行计划(通过 DMV 缓存的执行计划或通过分析捕获的执行计划)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-03
            • 2020-12-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多