2009-01-07 88 views

回答

11

我可以隱約地理解混淆代碼,如果它的功能非常先進的話,但我認爲混淆你的SQL可能不值得一提。

無論如何,我在這裏看到的很多SQL都是標準混淆。

+0

哈哈,只是因爲你沒有得到所有這些精美的SQL語句的genuis,並不意味着它們被混淆了。你的天才福太弱了。 ;) – Bombe 2009-01-07 16:26:34

0

您可以隨時在C#(或VB)中編寫普通代碼並將其存儲在數據庫之外的DLL中。

然後你不必擔心模糊你的SQL。

+0

是的,但這些DLL可以很容易反編譯,所以你需要混淆,所以你回到了方形1. – 2011-12-15 15:29:33

0

如果你真的擔心有人進入數據庫,並看到源的程序,那麼作爲S.洛特說,你可以端口過程C#。我會推薦LINQ。

但是,數據庫本身應該受到保護,以免人們訪問不應該有的過程的代碼。如果需要,您可以限制用戶或組的權限,以僅對EXCUTE進行訪問。

3

至少,在某種程度上是聯合國可逆號。可以顛倒SQL Server 2000的「WITH ENCRYPTION」以獲得原始明文。僞碼和一個T-SQL腳本說明了這一點: http://education.sqlfarms.com/education/ShowPost.aspx?PostID=783

注意:我還沒有用SQL 2005或更高版本嘗試過,但我的猜測是它同樣容易受到攻擊..作爲MSDN文檔狀態:

加密 指示SQL Server將CREATE PROCEDURE語句的原始文本轉換爲混淆格式。

強調我的。

2

很容易恢復,如果你知道,但恐嚇大多數人身邊代碼戳。 十六進制爲您的sproc邏輯編碼,然後使用EXEC(@hexEncodedString)執行。
看到這個post

1

舊帖子,我知道。但是我從搜索'爲什麼要混淆SQL?'來到這裏。我剛安裝了一個名爲ApexSQL Refactor(無隸屬關係)的免費產品,它提供了一個模糊處理組件。

它提供了幾個不同的選項,使您的代碼難以閱讀。我不確定爲什麼我想要這樣的功能,因爲其他人指出了加密存儲過程的能力。無論如何,這是它可以從它的混淆函數返回的輸出示例。

CrEAtE Procedure spInsertOrUpdateProduct @ProductNumber nVarChar(25), 
@ListPrice Money aS IF exIsTS(selECt * FROm Production.Product WHere 
[email protected] 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