我正在开发一个有版本的项目。如果准备发布新版本,我准备存储过程以由DBA更新数据库。我给他发了SP并执行了他们。但是,我不希望DBA看到我的SP代码。是否可以在不向DBA显示代码的情况下传输存储过程。
答案 0 :(得分:2)
如果您发送CLR存储过程并对程序集进行模糊处理,那么该功能将被相关地隐藏起来。
我建议这是使用CLR存储过程的错误动机。
答案 1 :(得分:1)
一种选择是在加密的文本文件中提供SQL存储过程。并在.NET中编写您自己的应用程序,它将读取加密的SQL文本,解密它然后部署到选定的服务器。
如果您在.NET中工作,那么您将知道编写这样一个应用程序是多么容易。只需提供使用您存储的Procs.DBA的应用程序将能够使用该应用程序部署存储过程而无需查看它们。 对于简单的场景,您可以对解密SQL文本所需的“密码”进行硬编码,但对于更敏感的场景,您可以使用PKI。
与所有其他解决方案一样,此解决方案可以进行逆向工程,但恕我直言,比在CLR中重写存储过程逻辑更好。
注意:我假设您将使用WITH ENCRYPTION
选项来创建存储过程。
答案 2 :(得分:0)
好吧,正如Phillip已经评论过的那样,如果我是那个执行你的存储过程的人,那么在我的数据库上运行我无法阅读的东西会有很大的问题。
如果您希望乍一看您的代码不可读,请尝试混淆(一种形式或其他形式几乎总是可用的 - 如果您只使用BASE64编码/解码的字符串并立即执行)
对于上述所有内容,您需要加密的存储过程,但这取决于系统,我不知道tsql足以告诉您。