如何混淆SQL Sprocs?

问题描述 投票:8回答:10

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

sql stored-procedures obfuscation
10个回答
10
投票

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

无论如何,我在这里看到的很多SQL都是标准的混淆。


0
投票

如果你真的担心有人进入数据库并看到程序的来源,那么正如S. Lott所说,你可以将程序移植到C#。我推荐LINQ。

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



6
投票

请参阅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文档所述:

ENCRYPTION表示SQL Server将CREATE PROCEDURE语句的原始文本转换为模糊格式。

重点是我的。


2
投票

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

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


2
投票

如果你知道但是对于大多数人来说代码都很恐怖,那就很容易逆转。十六进制编码你的sproc逻辑,然后执行EXEC(@hexEncodedString)。 看到这个post


2
投票

老帖子,我知道。但是我从这里搜索“我为什么要混淆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

1
投票

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

这将依赖于不将源SQL留在客户机器上。

有关详情,请参阅此处:

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


0
投票

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

然后,您不必担心混淆SQL。

© www.soinside.com 2019 - 2024. All rights reserved.