【问题标题】:How to Obfuscate SQL Sprocs?如何混淆 SQL Sprocs?
【发布时间】:2009-01-07 16:03:40
【问题描述】:

有没有办法隐藏/保护/混淆 MS SQL 存储过程?

【问题讨论】:

    标签: sql stored-procedures obfuscation


    【解决方案1】:

    如果混淆代码的功能非常先进,我可以模糊地理解它,但我认为混淆你的 SQL 可能不值得麻烦。

    不管怎样,我在这里看到的很多 SQL 都被混淆为标准。

    【讨论】:

    • 哈哈,只是因为你没有得到所有这些优秀 SQL 语句的真正来源,并不意味着它们被混淆了。你这天才,简直太弱了。 ;)
    【解决方案2】:
    【解决方案3】:

    请参阅 CREATE PROCEDURE 语句的 ENCRYPTION 选项。

    http://msdn.microsoft.com/en-us/library/ms187926.aspx

    【讨论】:

    【解决方案4】:

    没有。至少,不是以不可逆转的方式。 SQL Server 2000 的“WITH ENCRYPTION”可以反向获取原始明文。说明这一点的伪代码和 T-SQL 脚本在这里: http://education.sqlfarms.com/education/ShowPost.aspx?PostID=783

    注意:我没有在 SQL 2005 或更高版本上尝试过,但我猜它同样容易受到攻击。正如 MSDN 文档所述:

    加密 表示 SQL Server 会将 CREATE PROCEDURE 语句的原始文本转换为混淆格式。

    重点是我的。

    【讨论】:

      【解决方案5】:

      一种选择是仅将存储过程的敏感部分放在 CLR 存储过程中,并使用专业的混淆产品对该程序集进行混淆。

      http://msdn.microsoft.com/en-us/library/ms131094.aspx

      【讨论】:

        【解决方案6】:

        如果你知道的话,很容易可逆,但对大多数浏览代码的人来说是可怕的。 十六进制编码您的存储过程逻辑,然后使用 EXEC(@hexEncodedString) 执行。
        看到这个post

        【讨论】:

          【解决方案7】:

          老帖子,我知道。但我是通过搜索“我为什么要混淆 SQL?”来到这里的。我刚刚安装了一个名为 ApexSQL Refactor(无从属关系)的免费产品,它提供了一个混淆组件。

          它提供了几种不同的选项来使您的代码难以阅读。我不确定为什么要提供这样的功能,因为其他人注意到加密存储过程的能力。无论如何,这是它可以从它的混淆函数返回的输出示例。

          CrEAtE Procedure spInsertOrUpdateProduct @ProductNumber nVarChar(25),
          @ListPrice Money aS IF exIsTS(selECt * FROm Production.Product WHere
          ProductNumber=@ProductNumber AnD ListPrice>1000) uPdatE Production.
          Product sET ListPrice=(ListPrice-100) where ProductNumber=
          @ProductNumber elsE INSerT intO Production.Product(ProductNumber,
          ListPrice) SelECT @ProductNumber,@ListPrice GO SElEct * fRoM
          Production.Product gO iNsERT iNTo Production.UnitMeasure(
          UnitMeasureCode,Name,ModifiedDate) vAlUeS(N'FT2',N'Square Feet',
          '20080923'); Go
          

          【讨论】:

            【解决方案8】:

            您可以在创建存储过程时使用 ENCRYPTION 子句。

            不过,这将依赖于不要将源 SQL 留在客户计算机上。

            查看这里了解更多信息:

            http://msdn.microsoft.com/en-us/library/ms187926(SQL.90).aspx

            【讨论】:

              【解决方案9】:

              您总是可以用 C#(或 VB)编写普通代码,并将其存储在数据库之外的 DLL 中。

              那么您就不必担心混淆您的 SQL。

              【讨论】:

              • 是的,但是这些 dll 可以很容易地反编译,所以你需要混淆,所以你回到了第 1 格。
              • 所有可执行文件都可以被反编译和逆向工程。所以你不能离开广场 1。何必呢?
              【解决方案10】:

              如果您真的担心有人进入数据库并查看该过程的源代码,那么正如 S. Lott 所说,您可以将该过程移植到 C#。我会推荐 LINQ。

              但是,数据库本身可能应该受到保护,以防止人们访问不应该访问的过程的代码。如果需要,您可以将用户或组的权限限制为仅对 proc 具有 EXECUTE 访问权限。

              【讨论】:

                猜你喜欢
                • 2011-07-03
                • 2019-05-19
                • 1970-01-01
                • 2021-02-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-11-23
                相关资源
                最近更新 更多