SQL Server 存储过程加密是否安全?

SQL Server 存储过程加密是否安全?

我在 Windows Server 2003 Enterprise 上使用 SQL Server 2008 Enterprise。我为 SQL Server 开发了一些存储过程,安装 SQL Server 的计算机可能不完全在我的控制之下(可能被不受信任的第三方使用)。

我想使用 SQL Server 提供的加密存储过程功能来保护我的存储过程 T-SQL 源代码(即不被其他方查看)。我不确定加密存储过程是否 100% 安全,以及机器(安装有 SQL Server)的管理员是否仍有办法查看存储过程的源代码?

提前致谢,乔治

答案1

请放心,即使您在 SQL Server 2008 中对存储过程使用加密,也可以使用第三方工具轻松解密。有很多这样的工具,其中之一是http://www.elitude.net/

如果您使用的是专有软件,那么如果有坚定的用户,使用加密添加另一层是不够的。您所能做的就是要求他们签署保密协议 (NDA) 并遵守这些规则。

答案2

它是“安全的”,因为 SQL Server 已经在数据库中存储了加密的过程文本和解密所需的密钥,因此当它需要过程文本时 - 编译查询计划以执行它 - 它可以对其进行解密。

SQL Server 所能做的最多的就是混淆密钥,试图隐藏它,使其不容易被盗。

历史上曾发生过重放攻击,如果您使用 ALTER PROCEDURE,它将重复使用相同的密钥。通过将 ALTER PROCEDURE 与已知明文结合使用,您可以比较生成的加密输出并恢复密钥流,然后使用它来解密原始加密文本。(它使用 RC4 流密码,该密码会产生一个称为密​​钥流的伪随机位串,然后将其与明文进行异或运算以进行加密,或与加密文本进行异或运算以进行解密。)我不知道在 SQL Server 2008 中是否仍然如此。

答案3

如果足够努力,SQL 服务器 DBA 总是有办法查看存储过程的内容。使这项工作更加困难的唯一方法是使用第三方产品(如 sql-shield),该产品将使用不同的加密方案来防止“常见”解密攻击成功。每当您向某人提供加密数据并访问解密密钥时,您都无法阻止数据解密(无论该过程多么模糊)。只有当加密密钥和数据不能同时使用时,加密才是真正“好的”。您还可以考虑使用 CLR 存储过程和任何可用的 .net 混淆器来混淆代码。请参阅CLR 存储过程举个例子。

相关内容