有很多种方法可以查看加密过程。
SSMS 中加密过程的示例:
有一个很好的问题:如何查看加密视图或存储过程,您可以看到查看加密过程代码的多种方法,例如使用第三方工具、 专用管理连接、反转RC4 流密码等等,但还有其他很好的答案。
这是使用 DAC 和链接服务器查看加密存储过程代码的另一种引人注目的方式。
那么,我如何在客户的数据库中部署加密的存储过程,以便他们无法解密并查看代码?
过去,他们在自己的存储过程中使用了我们的代码,在许多方面和领域破坏了数据的完整性。我们不希望这种情况再次发生;如果他们需要任何更改或改进,他们可以寻求支持,我们可以安排。
他们托管数据库并拥有完全的访问/控制权,并负责备份、维护等。我无法提供更多细节,也许他们的 DBA 正在阅读这篇文章;)
我在想也许我可以将解密添加或附加到密码中......?
我也会考虑第三方工具。如果您对任何此类工具有积极的体验,请告知,但我更喜欢通过 SQL Server 进行操作。
问题:有没有办法部署无法解密的加密存储过程?
TL;DR:你不能通过这种方式解决你的根本问题。
没有办法阻止具有 root 权限的合格用户执行这样的管理操作。
如果您不希望客户端拥有系统管理员权限,那么您就不能让他们自行托管。
您可以通过声明对某些代码的任何更改都会使其 SLA 失效来缩小差异,但这是最接近的了(即使这样也有特定于实现的陷阱)。除此之外,您需要为他们托管数据库。
这篇文章非常有帮助:
如何在 SQL Server 中加密存储过程
它展示了存储过程加密、解密等的各个方面:
以下是有关在 SQL Server 中加密存储过程您应该了解的一些事项:
可以通过 DAC 端口访问系统表或直接访问数据库文件的特权用户仍然可以查看存储过程(非加密)定义。
可以将调试器附加到服务器进程的用户可以在运行时从内存中检索原始过程。
3.使用加密可防止该过程作为 SQL Server 复制的一部分发布。
CLR 过程无法加密。
本机编译的过程无法加密。
关于我上面的问题,
我认为没有办法。为了运行存储过程,SQL Server 需要能够读取 SQL 代码(并在需要时进行编译)。
因此,如果有这样的功能,用户只有拥有密码才能运行该程序。
除非 sql 只存储编译后的代码而不必保留源代码。这可以通过CLR 存储过程来实现,但底层 IL 可以由坚定的 DBA 进行逆向工程。