这个问题可能不适合这个平台,但我相信这里的人很多。
我正在为ERP系统编写数据传输应用程序,许多人创建的C#项目速度慢,不灵活且充满错误。我找到了一种在带有存储过程的SQL SERVER中执行此操作的方法。但我不希望我的SP被任何程序员窃取,因为SP是开源的。我用加密创建了我的SP,但我在互联网上找到了一个可以显示SP内容的小应用程序。
在sql server中是否还有其他加密和保护SP的方法?
答案 0 :(得分:2)
您的应用程序完全是否在存储过程中编写而没有其他代码?您认为有人真的想要窃取您的代码的可能性有多大?我只是问,因为通常,如果有人想要严格的代码,他们会找到一种方法来获得它。如果他们会到counterfeit an entire Apple store,那么总会有人破解任何加密方案。
保护您的知识产权(即代码)的最佳方法是不将其交给任何人:将其作为服务托管。除了明显的,简单的,但并非总是可能的选择之外,还有一些事情需要考虑:
对于T-SQL存储过程,您当然可以通过使用内置加密来阻止低端窃贼。是的,你找到了一种通过搜索解密它的方法,但不是每个人都会这样做或知道要寻找什么。这不是一个障碍,但同样,这是一个非常容易的步骤,可以解决那些只是在四处寻找的人。
您可以将一些代码放入SQLCLR(即.NET C#或VB,通过SQL Server" CLR集成"功能/ API),尽管这不会为一切工作,也不是一切的好选择。但是,对于任何在SQLCLR中更高效的代码,获取程序集的源代码将更加困难。同样,并非不可能,并且有免费的工具来反编译程序集,但这确实提高了一点,因为有人必须将程序集提取到DLL然后反编译它(虽然我相信一个工具将从SQL中提取它服务器,但仍然比#34;如何解密加密的存储过程更难以接受"
关于.NET代码(绝对适用于独立应用程序,也可能适用于SQLCLR代码),也可能对程序集进行模糊处理,以便最好对其进行反编译。 Red-Gate的SmartAssembly等产品可以做到这一点。
比竞争对手更好:
所以,如果你能找到一种快速简便的方法,那就太好了。但是,如果您花时间更好地改进产品,就不要花太多时间。此外,除非你想出一些高度复杂的算法,否则大多数事情都可以进行逆向工程,如果它们足够智能的话。但如果你担心的人那么聪明,那么他们的软件是否会变得缓慢,不灵活且充满错误&#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.
确保您个人拥有保存在其他地方的存储过程的副本,您自己无法看到过程定义。