【问题标题】:how to secure a valuable stored procedure in sql server如何保护 sql server 中有价值的存储过程
【发布时间】:2015-08-05 03:06:39
【问题描述】:

这个问题可能不适合这个平台,但我非常信任这里的人。

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

还有其他方法可以在 sql server 中加密和保护我的 SP 吗?

【问题讨论】:

  • 当然,他们应该与我联系。这就是我想说的。如果我做了一个 C# 应用程序,他们会与我联系,因为他们看不到应用程序的内部
  • @SQLPolice,如果他复制我的sql并发送到许多公司怎么办。然后,我会破产。另外,您为什么认为 .Net 开发人员将二进制文件而不是源代码提供给他们的客户。这是生意
  • 毫无意义的讨论

标签: sql sql-server stored-procedures encryption


【解决方案1】:

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

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

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

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

  3. 1234563有像 Red-Gate 的 SmartAssembly 这样的产品可以做到这一点。
  4. 比你的竞争对手更好:

    1. 创新并提供更好的功能(即更好的产品)。倾听客户的心声,让他们的生活更轻松。即使有人最终获得了您的代码,他们也无法窃取您。被盗代码可能会教给他们一些东西,但与您应该生成的代码相比,它基本上是停滞不前的。
    2. 提供更好的服务。风度翩翩,以微笑彻底、恭敬地回答问题(即使是愚蠢/愚蠢的问题——如果你需要的话,向朋友发泄,但不要以书面形式)。当然,有些客户决定纯粹根据价格购买,但服务/支持通常是获得和留住客户的重要因素。

所以,如果您能找到一种快速简便的方法来做到这一点,那就太好了。但是,当您的时间最好花在改进您的产品上时,不要花太多时间在上面。此外,除非你想出一些高度复杂的算法,否则大多数事情都可以逆向工程,只要它们足够聪明。但是,如果您担心的人那么聪明,他们的软件会“慢、不灵活且充满错误”吗?沿着同样的思路,(并且只是为了说明),其他软件“缓慢、不灵活且充满错误”与它们用 C# 编写无关(尤其不是“不灵活且充满错误”) " 问题):它们只是写得不好;-)。

【讨论】:

  • 我同意你的看法。更好的服务比一段代码更有价值。非常感谢您的宝贵时间。
【解决方案2】:

是的,有一种方法,只需在您的 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.

确保您个人将存储过程的副本保存在您自己看不到过程定义的其他地方。

【讨论】:

  • 您只是忘了说这种加密当然是可逆的。 SQL Server 中没有针对 DBA 的保护措施。
  • WITH ENCRYPTION 很容易可逆。
猜你喜欢
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多