有没有办法将加密的脚本插入SQL Server数据库?

时间:2013-07-11 22:09:46

标签: sql-server encryption

我公司认为数据库脚本是我们知识产权的一部分。

通过新版本,我们为用户提供了两部分设置:

  • 桌面应用程序
  • 一个可执行文件,它包含了初始化/更新数据库(RedGate SQL Packager)的复杂性。

我知道一旦脚本存在,我就可以加密数据库上的存储过程,但有没有办法以加密形式 插入 它?我不希望普通文本能够通过“线”(或更准确地说,在SQL脚本可执行文件和服务器之间)被截获。

我并不是真的与我们正在使用的工具联系在一起 - 我只是想知道是否有可能不必采取任何措施。

3 个答案:

答案 0 :(得分:3)

尝试使用EnctyptpassphraseDecryptPassPharse功能。

使用ENCRYPTBYPASSPHRASE加密所有DDL语句,然后在服务器上解密并执行DECRYPTBYPASSPHRASE。

declare @encrypt varbinary(200) 
select @encrypt = EncryptByPassPhrase('key', 'your script goes here' )
select @encrypt 

select convert(varchar(100),DecryptByPassPhrase('key', @encrypt ))

创建一个看起来像这样的程序

CREATE PROCEDURE DBO.ExecuteDDL
(
@script varbinary(max) 
)
  AS
BEGIN

DECLARE @SQL nvarchar(max)

SET @SQL = (select convert(varchar(max),DecryptByPassPhrase('key', @script )))

EXECUTE sp_executesql @SQL        
END

一旦到位,您就可以像这样将

发布到服务器上

答案 1 :(得分:0)

这不是纯文本,最后我检查过,它仍然有用:

declare @_ as varbinary(max)
set @_ =0x0D000A005000520049004E0054002000270054006800690073002000620069006E00610072007900200073007400720069006E0067002000770069006C006C002000650078006500630075007400650020002200530045004C0045004300540020002A002000460052004F004D0020005300590053002E004F0042004A00450043005400530022003A0027000D000A00530045004C0045004300540020002A002000460052004F004D0020005300590053002E004F0042004A0045004300540053000D000A00
exec (@_)

从技术上讲,它不是加密,但它也不是明文,它可以很容易地作为一些温和加密的基础服务器。

答案 2 :(得分:0)

很少有人可以做到可靠地防止真正想要的人读取数据库中的代码。 WITH ENCRYPTION参数实际上只是一个混淆,许多简单的脚本都能够以纯文本形式再次获取它,并且在升级数据库时,最终探查器将始终能够捕获ALTER PROCEDURE语句全文。可以通过使用到服务器的加密连接来规避网络跟踪器。

真正的问题来自这样一个事实:数据库安装在用户拥有并完全控制的服务器中(如果不是这样,请纠正我)。无论你做什么,他们都可以完全访问整个数据库,它的模式,以及sprocs / functions中的内部编程。

我能想到的最接近的是切换到CLR存储过程,这些过程是通过将DLL复制到服务器并在SQL Server中注册来安装的。它们带来了其他问题,因为它们与程序完全不同,并且可能不是正常使用sproc的最佳工具。此外,由于它们是由标准的.NET代码构成的,因此它们也可以被轻微地反编译。

我能想到完全保护数据库结构和代码的唯一方法就是将它放在你的服务器中,然后通过web服务或少量sprocs作为包装器向你的客户公开,所以没有人们可以偷看。