我们有很多存储过程都包含很多注释 有没有办法从存储过程中提取注释以便部署,以便用户在使用SQL Server Management Studio修改存储过程时无法看到它们?
注意:我们正在使用SQL Server 2008。
答案 0 :(得分:4)
您可以使用WITH ENCRYPTION选项:
CREATE PROCEDURE dbo.foo
WITH ENCRYPTION
AS
BEGIN
SELECT 'foo'
--Try this just to make sure
END
之前请确保将存储过程的逻辑保存在安全的地方,因为保存后您将无法轻松访问该过程的代码。
之后,用户无法使用企业管理器或 sp_helptext 来获取源代码,但这可能会被破解......
答案 1 :(得分:1)
加密很棒,但如果您需要允许用户对存储过程进行更改(如您的初始问题所示),那么加密不是您的答案。它会隐藏用户的评论和代码。
如果您希望保持代码可见但删除注释,则可能需要使用Management Studio编写所有存储过程的脚本,然后使用UltraEdit等宏/文本编辑器查找并删除所有注释,然后运行该注释脚本再次重建所有无评论的存储过程。
答案 2 :(得分:0)
我不相信WITH ENCRYPTION是要走的路,因为它很容易破解。从来没有想过无法解密。即使它不是一个复杂的加密,它确实会影响重新编译时的执行,特别是如果存储过程需要不断重新编译(例如,如果它使用了大量的临时表和游标)。
应该有一种方法来创建一个存储过程来删除 - 和下一个回车之间以及/ * * / containers之间的所有文本,然后将create / alter脚本保存为其他内容,也许在你的例如,质量保证数据库。 sp_execute_sql将非常有用。
如果不是存储过程,则可以使用任何其他应用程序从模式中检索存储过程,然后使用正则表达式执行我刚才描述的操作,并在没有注释的情况下吐出新的alter / create T-SQL代码。