2012-09-05 43 views
1

我正在开发一个有版本的项目。如果新版本准备发布,我准备存储过程以由DBA更新数据库。我给他发了SP,然后他执行了。但是,我不希望DBA看到我的SP代码。是否可能传输存储过程而不向DBA显示代码?安全传输存储过程

+4

在我看来,你正在寻找一个社会问题的技术解决方案。它不会解决问题。当DBA不允许你自己在服务器上运行存储过程时,他肯定不会运行你写的任何他无法读取的程序。 – Philipp

+2

DBA无法运行'sp_helptext'什么停止http://msdn.microsoft.com/en-us/library/ms176112.aspx? – Jodrell

+2

我在银行工作。 DBA具有执行SP的身份验证,但我没有。但是,我已经签署了一份关于申请安全责任的文件。所以,银行和我没有信任问题。 DBA可以更改存储过程。至少,他可以偷走我的​​代码。我花了6年的时间来开发这个软件。而且我不希望他自由地使用我的代码。为什么用户遇到问题就遇到问题。如果你知道一个方法回答这个问题。我没有要求你提出关于这个问题的想法。它是社交还是其他? BLa bla。只需要解决。明确? – osmanraifgunes

回答

1

一种选择是在加密文本文件中提供SQL存储过程。在.NET中编写您自己的应用程序,该应用程序将读取加密的SQL文本,将其解密并部署到选定的服务器。

如果你在.NET中工作,那么你会知道写这样的应用程序是多么容易。只要提供该应用程序与您存储的Procs.DBA将能够使用该应用程序部署存储过程,而不会看到它们。 对于简单的场景,您可以硬编码解密SQL文本所需的'密码',但对于更敏感的场景,您可以使用PKI。

像所有其他解决方案一样,此解决方案可以进行反向设计,但是与在CLR中重写您的存储过程逻辑相比,恕我直言,这是一种更好的选择。

注意:我假设您将使用WITH ENCRYPTION选项来创建存储过程。

+0

我实际上并没有意识到'WITH ENCRYPTION'选项,+1 – Jodrell

+0

WITH ENCRYPTION是最好的选择。感谢您的帮助。 – osmanraifgunes

0

好吧,正如Phillip已经评论过的那样,如果我是执行存储过程的人,我会在我的数据库上运行某些东西时遇到大问题,我无法阅读。

如果您希望您的代码不可读乍看之下,试图混淆(这种或那种形式几乎总是可用的 - 如果你只使用与执行即时BASE64编码/解码的字符串)

一切之上,你会需要加密的存储过程,但这取决于系统,我不知道tsql足以告诉你。

2

如果您运送CLR存储过程并混淆程序集,那么功能将相当隐蔽。

我会建议这将是错误使用CLR存储过程的动机。

+0

谢谢你的回答。我会尝试一下并让你知道结果。 – osmanraifgunes

+1

他们仍然可以运行SQL Profiler并查看SQL引擎实际执行的查询。阻止某人胜任对任何功能代码进行反向工程是非常困难的,但这会提高标准。 – Jodrell