【问题标题】:SQL Server: How to extract comments from stored procedures for deploymentSQL Server:如何从存储过程中提取注释以​​进行部署
【发布时间】:2010-12-12 22:22:01
【问题描述】:

我们有很多存储过程,它们都包含很多 cmets。
有没有办法从存储过程中提取 cmets 进行部署,以便用户在使用 SQL Server Management Studio 修改存储过程时看不到它们?

注意:我们使用的是 SQL Server 2008。

【问题讨论】:

  • 与其隐藏所有“验证员工类型字段,因为 ID10T 可能键入 anything”cmets,不如直接删除它们。 :-)
  • @Jeffrey:完全确认。但是我们的 cmets 主要是在实际 CREATE PROCEDURE 语句之前的版本信息。但它们仍然最终在数据库中。还有一些 cmets 带有指向我们的 PM 软件的链接,用户确实不必看到,但对我们仍然有用。
  • 上一个问题可能会帮助stackoverflow.com/questions/1640321/…

标签: sql sql-server tsql sql-server-2008 stored-procedures


【解决方案1】:

您可以使用 WITH ENCRYPTION 选项:

CREATE PROCEDURE dbo.foo 
WITH ENCRYPTION 
AS 
BEGIN 
    SELECT 'foo' 
--Try this just to make sure
END

在此之前,请确保将存储过程的逻辑保存在安全的地方,因为一旦保存,您将无法轻松访问该过程的代码。

之后用户无法使用Enterprise Managersp_helptext获取源代码,但可以破解...

【讨论】:

  • 是的,这似乎是个好主意。你知道这样做是否会造成性能损失?我可以在 MSDN 上找到有关此的任何信息,但我想没有。
  • 请注意,您无法再调试该过程,并且分析只会在加密后返回该过程的聚合信息。
  • 加密不是不可破解的,其实很容易破解。它确实会影响性能。除了使用 CLR 之外,我看不到他所要求的解决方案。
【解决方案2】:

加密很棒,但如果您需要允许用户更改存储过程(正如您最初的问题所暗示的那样),那么加密不是您的答案。它会对用户隐藏 cmets 和代码。

如果您想保持代码可见但删除 cmets,您可能需要使用 Management Studio 编写所有存储过程的脚本,然后使用 UltraEdit 等宏/文本编辑器查找并删除所有 cmets,然后运行该程序再次编写脚本来重建所有无注释的存储过程。

【讨论】:

  • 感谢您的回答。但是,就我而言,加密是更好的解决方案,因为我不需要用户能够修改程序。
【解决方案3】:

我不相信 WITH ENCRYPTION 是要走的路,因为它很容易被破解。它从来都不是不可能解密的。即使不是复杂的加密,它也会影响重新编译时的执行,尤其是在存储过程需要不断重新编译的情况下(例如,如果它使用大量临时表和游标)。

应该有一种方法可以创建一个存储过程来删除 -- 和下一个回车之间以及 /* */ 容器之间的所有文本,然后将 create / alter 脚本另存为其他内容,可能在您的例如,QA 数据库。 sp_execute_sql 将非常有用。

如果不是存储过程,则可以使用任何其他应用程序从模式中检索存储过程,然后使用正则表达式执行我刚才描述的操作,并在没有 cmets 的情况下生成新的 alter/create T-SQL 代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-07
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2016-10-31
    • 1970-01-01
    相关资源
    最近更新 更多