1

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

4

3 回答 3

2

如果您发布 CLR 存储过程并混淆程序集,那么该功能将被很好地隐藏。

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

于 2012-09-05T08:49:23.117 回答
1

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

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

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

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

于 2012-09-07T13:47:08.307 回答
0

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

如果您希望您的代码乍一看不可读,请尝试混淆(一种或另一种形式几乎总是可用 - 如果您只是使用 BASE64 编码/解码字符串并立即执行)

对于以上所有内容,您都需要加密的存储过程,但这取决于系统,我对 tsql 的了解不足以告诉您。

于 2012-09-05T08:47:16.243 回答