我正在第三方数据库上工作。
当我尝试通过右键单击,CREATE TO
然后到来查看视图的定义NEW QUERY EDIT WINDOW
时,出现错误:
该属性可能对此对象不存在,或者由于访问权限不足而无法检索。文本已加密。
-- Encrypted text
我正在第三方数据库上工作。
当我尝试通过右键单击,CREATE TO
然后到来查看视图的定义NEW QUERY EDIT WINDOW
时,出现错误:
该属性可能对此对象不存在,或者由于访问权限不足而无法检索。文本已加密。
-- Encrypted text
Answers:
可以用来动态解密加密对象的另一个第三方工具是Red Gate的SQL提示:http : //www.red-gate.com/products/sql-development/sql-prompt/features
将鼠标悬停在存储过程上将使您看到解密的创建脚本。
免责声明:此工具是商业工具(有14天的免费试用期),我为Red Gate工作。
我在这里对这个问题有相当详细的描述。
简而言之,对象不是真正加密的,而是模糊的。因此我们可以找回原件。该方法有点涉及,但包含以下步骤:
选择这样的混淆代码:
SELECT @secret = imageval
FROM sys.sysobjvalues
WHERE objid = OBJECT_ID(@object_name);
用另一个具有相同名称object_id和相同长度(以字节为单位ALTER PROCEDURE
)的对象替换该对象(例如,使用)
这将为您提供原始代码。但是,正如Kin所言,这样做可能会带来支持甚至法律影响,因此请务必先咨询您的律师。
使用RC4流密码对模块文本进行加密。
RC4初始化密钥是根据以下内容的SHA-1哈希计算得出的:
该模块的对象子ID为:
然后,具有适当特权的用户可以通过以下方式解密模块:
我的文章中有更多详细信息和完整的代码实现:
您可以使用专用管理员连接(DAC)连接到SQL Server,然后查看存储过程的sql文本。使用以下方法连接到DAC:
admin:Your_Servername
您可以在所需要的完整步骤,这个答案对堆栈溢出由马丁·史密斯。
另一个选择是使用解密SQL Server 2005、2008和R2中的加密存储过程,视图,函数中提到的某些第三方脚本。
附带说明 -如果它是第三方数据库,并且您在产品上进行操作,那么供应商会支持它吗?可能有充分的理由对SP或视图进行加密。最好做一个备份,然后再摆弄它。
如果要预览原始DDL脚本或解密加密的对象,可以签出ApexSQL Decrypt
它是一个免费的独立工具,可以选择将其集成到SSMS中,预览原始DDL脚本。此外,您可以一轮解密位于多台服务器上的对象。dbForge SQL Decryptor是另一个可以帮助您的工具
我经常用来一次解密多个存储过程的方法...
使用RedGate的SQL比较并将您的数据库与空数据库(或您知道的任何没有存储过程的数据库)进行比较。创建一个部署脚本并复制到SSMS中。查找并用空格替换“ 加密”。然后将CREATE PROCEDURE更改为ALTER PROCEDURE。对原始数据库运行RedGate脚本,您已经删除了所有存储过程加密。
我有一个包含400多个存储过程的数据库,并且虽然SQL Prompt方便使用,但是我不值得花时间右键单击,复制,粘贴400多个存储过程。使用RedGate SQL Compare,我能够在大约10分钟内完成从400多个存储过程中删除加密的操作。