首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在sql server中保护有价值的存储过程

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

Stack Overflow用户
提问于 2015-05-23 00:47:13
回答 2查看 4.6K关注 0票数 3

对于这个平台来说,这个问题可能并不完美,但我非常信任这里的人。

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

在sql服务器中还有其他加密和保护我的SPs的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-23 02:36:25

您的应用程序是否完全用存储过程编写,没有其他代码?你认为有人真的想偷你的代码的可能性有多大?我之所以这样问,是因为通常情况下,如果有人非常想要代码,他们就会想办法得到它。如果他们会深入到假冒整个苹果商店,那么总有人可以破解任何加密方案。

保护您的知识产权(即代码)的最佳方法就是不将其提供给任何人:将其作为服务托管。除了这种显而易见的、简单的、但并非总是可能的选择之外,以下是一些需要考虑的事项:

  1. 对于T存储过程,当然可以通过使用内置加密来阻止低端盗贼。是的,你找到了一种通过搜索来解密它的方法,但是并不是每个人都会这样做或者知道该寻找什么。这不是一个很大的障碍,但同样,这是一个非常容易的步骤,除草的人,谁只是四处闲逛。
  2. 您可以将一些代码放入SQLCLR (即.NET C#或VB通过Server的“”功能/API),尽管这并不适用于所有的东西,也不是一个好的选择。但是,对于任何在SQLCLR中执行更有效的代码,获得程序集的源代码就会更加困难。同样,也不是不可能,还有一些免费的工具可以对程序集进行反编译,但这确实提高了一些标准,因为有些人必须将程序集提取到DLL中,然后将其解压缩(虽然我相信有一个工具会从Server中提取它,但比“如何解密加密的存储过程”更难获得)。
  3. 关于.NET代码(当然也适用于独立应用程序,也可能是SQLCLR代码),也有可能混淆程序集,因此最多只能对其进行分解。有些产品,比如Red的SmartAssembly,可以做到这一点。
  4. 比你的竞争对手更好:
代码语言:javascript
运行
复制
1. Innovate and offer better features (i.e. a better product). Listen to customers and make their lives easier. Even if someone does end up getting your code, they can't steal you. Stolen code might teach them something, but it is essentially stagnant compared to what you should be producing.
2. Offer better service. Be personable and answer questions thoroughly, respectfully, and with a smile (even silly / stupid questions--if you need to, vent to a friend, but never in writing). Sure, some customers decide to purchase purely on price, but service/support is usually a large factor in both getting and _retaining_ customers.

所以,如果你能找到一种快速而简单的方法来做这件事,那就太好了。但是,当你的时间花在改进你的产品上时,不要花太多的时间在上面。此外,除非你想出了一些非常复杂的算法,大多数东西都可以反向设计,如果它们足够聪明的话。但是,如果你担心的人是那么聪明,他们的软件会不会“慢,不灵活,充满错误”?按照同样的思路(只是声明一下),另一个软件“缓慢、不灵活且充满错误”与用C#编写它们没有任何关系(特别是“不灵活且充满错误”的问题):它们只是写得不好;-)。

票数 3
EN

Stack Overflow用户

发布于 2015-05-23 01:26:08

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

示例

代码语言:javascript
运行
复制
CREATE PROCEDURE spEncryptedProc
WITH ENCRYPTION
AS
BEGIN
  SELECT 1
END
GO

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

代码语言:javascript
运行
复制
exec sp_helptext 'spEncryptedProc'

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

请确保将存储过程的副本保存在其他地方,您无法亲自查看过程定义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30407763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档