SQL Server存储过程encryption安全吗?

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

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

在此先感谢乔治

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

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

SQL Server存储encryption过程文本和解密数据库所需的密钥是“安全的”,所以当它需要过程文本(编译查询计划以执行它)时,它可以解密它。

大多数SQL Server可以做的是模糊密钥,试图隐藏它,因此它不容易被盗。

历史上有一个重播攻击,如果你使用ALTER PROCEDURE,它将重新使用同一个密钥。 通过使用已知明文的ALTER PROCEDURE,您可以比较产生的encryption输出并恢复密钥stream,然后使用它来解密原始的encryption文本。 (它使用RC4stream密码,它产生一个叫做密钥stream的伪随机string,然后与明文进行异或encryption,或与encryption文本进行XOR解密。)我不知道是否仍然是这种情况SQL Server 2008。

SQl服务器DBA将总是有办法查看存储过程的内容,如果他们努力的话。 让这个努力变得更加困难的唯一方法就是使用第三方产品,例如sql-shield,它将使用不同的encryptionscheme来防止“通常的”解密攻击成功。每当你给某人encryption的数据并访问解密密钥永远不能阻止对数据的解密(不pipe这个过程是多么混乱)encryption密钥和数据不可用在一起时,encryption仅仅是“好的”你也可以考虑使用存储的CLR来混淆你的代码程序和许多.net混淆器中的任何一个。例如,查看CLR存储过程 。