如何查看加密的视图或存储过程


27

我正在第三方数据库上工作。

当我尝试通过右键单击,CREATE TO然后到来查看视图的定义NEW QUERY EDIT WINDOW时,出现错误:

该属性可能对此对象不存在,或者由于访问权限不足而无法检索。文本已加密。


如果需要,您还可以运行SQL事件探查器跟踪,并捕获SP SQL正在执行的操作。
Pimp Juice IT

是否可以通过sql profiler获取加密的tsql?@PimpJuiceIT
wenzzzel

@wenzzzel我相信是的,但是我不记得确切地告诉您100%的准确性,但是我相信他过去使用了加密的SP,我运行了探查器跟踪以了解需要什么。我目前不支持任何环境,但可以相信,即使它来自加密过程,您也可以看到配置文件跟踪的运行情况。
Pimp Juice IT

好的,我不太确定那是因为我只能得到-- Encrypted text
wenzzzel

Answers:



18

在这里对这个问题有相当详细的描述。

简而言之,对象不是真正加密的,而是模糊的。因此我们可以找回原件。该方法有点涉及,但包含以下步骤:

  1. 使用专用管理员连接连接到实例
  2. 选择这样的混淆代码:

    SELECT @secret = imageval
    FROM   sys.sysobjvalues
    WHERE  objid = OBJECT_ID(@object_name);
  3. 用另一个具有相同名称object_id和相同长度(以字节为单位ALTER PROCEDURE)的对象替换该对象(例如,使用)

  4. 与上面相同的方式获取新混淆的代码
  5. 将这三个值异或(混淆后的原始值,替换值和混淆后的替换值)

这将为您提供原始代码。但是,正如Kin所言,这样做可能会带来支持甚至法律影响,因此请务必先咨询您的律师。


14

使用RC4流密码对模块文本进行加密。

RC4初始化密钥是根据以下内容的SHA-1哈希计算得出的:

  • 数据库系列GUID(从sys.database_recovery_status
    从转换的唯一标识符,以二进制(16)
  • 模块的对象ID(从目录视图)
    整数转换为小端二进制(4)
  • 模块的对象子ID
    smallint转换为little-endian binary(2)

该模块的对象子ID为:

  • 1用于未编号的存储过程;要么
  • (不建议使用的)已编号存储过程的过程编号;要么
  • 否则为0。

然后,具有适当特权的用户可以通过以下方式解密模块:

  1. sys.sysobjvalues获取加密的二进制文件(使用DAC)
  2. 如上所述计算RC4密钥
  3. 在二进制文件上运行著名的标准RC4算法
  4. 将结果从二进制转换为nvarchar(max)

我的文章中有更多详细信息和完整的代码实现:

的内部 WITH ENCRYPTION


我认为这是最简单,非商业的方法,在这种方法中,安装第三方工具不是可行的解决方案。
John Eisbrener

12

您可以使用专用管理员连接(DAC)连接到SQL Server,然后查看存储过程的sql文本。使用以下方法连接到DAC:

admin:Your_Servername

您可以在所需要的完整步骤,这个答案对堆栈溢出马丁·史密斯

另一个选择是使用解密SQL Server 2005、2008和R2中的加密存储过程,视图,函数中提到的某些第三方脚本。

附带说明 -如果它是第三方数据库,并且您在产品上进行操作,那么供应商会支持它吗?可能有充分的理由对SP或视图进行加密。最好做一个备份,然后再摆弄它。


8

如果要预览原始DDL脚本或解密加密的对象,可以签出ApexSQL Decrypt

它是一个免费的独立工具,可以选择将其集成到SSMS中,预览原始DDL脚本。此外,您可以一轮解密位于多台服务器上的对象。dbForge SQL Decryptor是另一个可以帮助您的工具


0

我经常用来一次解密多个存储过程的方法...

使用RedGate的SQL比较并将您的数据库与空数据库(或您知道的任何没有存储过程的数据库)进行比较。创建一个部署脚本并复制到SSMS中。查找并用空格替换“ 加密”。然后将CREATE PROCEDURE更改为ALTER PROCEDURE。对原始数据库运行RedGate脚本,您已经删除了所有存储过程加密。

我有一个包含400多个存储过程的数据库,并且虽然SQL Prompt方便使用,但是我不值得花时间右键单击,复制,粘贴400多个存储过程。使用RedGate SQL Compare,我能够在大约10分钟内完成从400多个存储过程中删除加密的操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.