【问题标题】:How to Encrypt Stored Procedure如何加密存储过程
【发布时间】:2010-02-10 03:52:05
【问题描述】:

我们可以预编译我们的 (ASP.NET) 网站,并且只能发布 IL 代码,因此客户无法获得源代码。

但是对于用 SQL Server 编写的存储过程,我们如何做到这一点。我的意思是,当我们给客户数据库时,他可以看到我所有的存储过程并且可以修改它们......我该如何保护它。

谢谢

拉贾

【问题讨论】:

  • “给供应商”到底是什么意思?这是 ISP 还是供应商需要构建您的环境的支持请求?
  • 感谢您指出.. 我的意思是客户

标签: asp.net sql-server-2005 stored-procedures


【解决方案1】:

一个老问题。以下是我在这里和那里收集的一些答案:

  • 加密存储过程。和以前一样 已经指出了两次,这个 真的不行,因为5分钟 谷歌搜索会发现几个黑客。

  • 将存储过程编写为 CLR 程序。比破解更难 “常规”存储过程,可能 更多的努力来生产和 支持。

  • 动态提交所有查询 你编译的 IL 代码。我明白 它可以从合理安全地完成 SQL 注入攻击,但很糟糕 在你发布之前确定。 (也许使用 Linq 来做到这一点?)

  • 转换所有数据库对象名称 (表、列、程序)到 指导或随机胡言乱语。他们可以 阅读它,但这无济于事。

  • 我并不完全熟悉 SQL 2005 及更高版本中的加密。我真的不认为你可以在基于代码的对象(过程、函数等)上使用它,但也许你可以?

但总的来说,一旦您将数据库副本提供给具有系统管理员权限的人,他们几乎可以用它做任何他们想做的事情。

【讨论】:

  • +1,如果有人拥有系统管理员或物理访问权限,则无法完成。您的动态查询点:分析器将向您显示那里发生了什么...
  • 曾几何时,Profiler 没有“清除”任何包含“密码”一词的已提交查询吗?唉,看起来 2005+ 不再这样做了。
【解决方案2】:

使用 WITH 加密

例子

CREATE PROCEDURE prTest
WITH ENCRYPTION
AS
SELECT GETDATE()

请记住,它可以被破解,并确保您备份了未加密的源代码

【讨论】:

    【解决方案3】:
    CREATE PROCEDURE ... WITH ENCRYPTION
    

    但是请注意,这种加密实际上更像是混淆,如果确定您的供应商,有几种方法可以绕过它,包括 DAC 连接、一些第 3 方产品(包括 RedGate SQL Prompt)和代码示例,您可以轻松地网上找。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 2013-08-23
      • 2010-10-29
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多