我们如何在SSMS中查看加密存储过程的主体?

时间:2012-03-12 05:39:49

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

我创建了一个新的存储过程WITH ENCRYPTION语句,现在我想查看它的主体。

解决方案是什么?

3 个答案:

答案 0 :(得分:5)

如果使用ENCRYPTED选项创建存储过程,SQL Server将在内部以模糊格式存储包含对象定义的文本

对象的实际定义存储在无法直接访问的系统表sys.sysobjvalues中。通过使用专用管理员连接(DAC)连接到SQL Server,您可以选择存储信息的imageval列

如果贵公司或客户不允许您使用第三方工具,请参阅此帖子,了解如何解密加密对象:

http://www.mssqltips.com/sqlservertip/2964/encrypting-and-decrypting-sql-server-stored-procedures-views-and-userdefined-functions/

但是,最简单的方法是使用第三方工具

其中一个是ApexSQL Complete,一个免费的SSMS和VS加载项

在ApexSQL中,完成加密对象的处理与任何其他SQL Server对象一样,只要显示其DDL脚本,即使使用解密加密对象选项加密

加密对象的脚本显示在内联对象详细信息对话框中:

enter image description here

免责声明:我作为支持工程师为ApexSQL工作

答案 1 :(得分:3)

保持脚本围绕创建存储过程的脚本。

使用此选项创建过程后,没有文档检索过程文本的方法。 CREATE PROCEDURE中有提示,如果您急于恢复文字:

  

ENCRYPTION

     

表示SQL Server将CREATE PROCEDURE语句的原始文本转换为模糊格式。在SQL Server的任何目录视图中都不能直接看到模糊处理的输出。无权访问系统表或数据库文件的用户无法检索混淆的文本。但是,对于可以通过DAC端口访问系统表或直接访问数据库文件的特权用户,该文本可用。此外,可以将调试器附加到服务器进程的用户可以在运行时从内存中检索解密的过程。

也就是说,你必须使用DAC连接并查询未记录的表 - 在SSMS中肯定没有可视选项。

答案 2 :(得分:0)

您可以使用工具SQL Compare进行解密。您需要创建一个数据库来比较sql脚本。返回结果脚本sql被解密。链接软:http://www.red-gate.com/products/sql-development/sql-compare/