如何在sql server中保护有价值的存储过程

时间:2015-05-23 00:47:13

标签: sql sql-server stored-procedures encryption

这个问题可能不适合这个平台,但我相信这里的人很多。

我正在为ERP系统编写数据传输应用程序,许多人创建的C#项目速度慢,不灵活且充满错误。我找到了一种在带有存储过程的SQL SERVER中执行此操作的方法。但我不希望我的SP被任何程序员窃取,因为SP是开源的。我用加密创建了我的SP,但我在互联网上找到了一个可以显示SP内容的小应用程序。

在sql server中是否还有其他加密和保护SP的方法?

2 个答案:

答案 0 :(得分:2)

您的应用程序完全是否在存储过程中编写而没有其他代码?您认为有人真的想要窃取您的代码的可能性有多大?我只是问,因为通常,如果有人想要严格的代码,他们会找到一种方法来获得它。如果他们会到counterfeit an entire Apple store,那么总会有人破解任何加密方案。

保护您的知识产权(即代码)的最佳方法是不将其交给任何人:将其作为服务托管。除了明显的,简单的,但并非总是可能的选择之外,还有一些事情需要考虑:

  1. 对于T-SQL存储过程,您当然可以通过使用内置加密来阻止低端窃贼。是的,你找到了一种通过搜索解密它的方法,但不是每个人都会这样做或知道要寻找什么。这不是一个障碍,但同样,这是一个非常容易的步骤,可以解决那些只是在四处寻找的人。

  2. 您可以将一些代码放入SQLCLR(即.NET C#或VB,通过SQL Server" CLR集成"功能/ API),尽管这不会为一切工作,也不是一切的好选择。但是,对于任何在SQLCLR中更高效的代码,获取程序集的源代码将更加困难。同样,并非不可能,并且有免费的工具来反编译程序集,但这确实提高了一点,因为有人必须将程序集提取到DLL然后反编译它(虽然我相信一个工具将从SQL中提取它服务器,但仍然比#34;如何解密加密的存储过程更难以接受"

  3. 关于.NET代码(绝对适用于独立应用程序,也可能适用于SQLCLR代码),也可能对程序集进行模糊处理,以便最好对其进行反编译。 Red-Gate的SmartAssembly等产品可以做到这一点。

  4. 比竞争对手更好:

    1. 创新并提供更好的功能(即更好的产品)。倾听客户的声音,让他们的生活更轻松。即使有人最终获得了您的代码,他们也无法窃取您。被盗的代码可能会教给他们一些东西,但与你应该制作的代码相比,它本质上是停滞不前的。
    2. 提供更好的服务。要善于表达并彻底,恭敬地回答问题,并带着微笑(即使是愚蠢/愚蠢的问题 - 如果你需要,发泄给朋友,但绝不写作)。当然,有些客户决定纯粹以价格购买,但服务/支持通常是获得和保留客户的重要因素。
  5. 所以,如果你能找到一种快速简便的方法,那就太好了。但是,如果您花时间更好地改进产品,就不要花太多时间。此外,除非你想出一些高度复杂的算法,否则大多数事情都可以进行逆向工程,如果它们足够智能的话。但如果你担心的人那么聪明,那么他们的软件是否会变得缓慢,不灵活且充满错误&#34 ;?并且沿着这些相同的路线(并且只是说明了),其他软件是“缓慢的,不灵活的,充满错误的”#34;与他们用C#编写没有任何关系(尤其不是"没有灵活和充满错误"问题):他们根本就没有写好; - )。

答案 1 :(得分:1)

是的,有一种方法,只需在您的sp定义中使用选项WITH ENCRYPTION即可。

示例

CREATE PROCEDURE spEncryptedProc
WITH ENCRYPTION
AS
BEGIN
  SELECT 1
END
GO

现在试着看看那个程序的定义......

exec sp_helptext 'spEncryptedProc'

Result: The text for object 'spEncryptedProc' is encrypted.

确保您个人拥有保存在其他地方的存储过程的副本,您自己无法看到过程定义。