2011-11-25 50 views
1

有沒有什麼辦法來隱藏SQL Server上的數據庫模式?掩蓋SQL Server數據庫模式的方法?

如果我在客戶端站點上安裝了SQL Server Express,是否有辦法模糊架構和數據,以便其他人無法前來學習架構以便將數據從其中提取出來並存入其他產品中?

+13

是的,沒有什麼比將客戶鎖定到升級路徑更好。他們喜歡這個。 –

+7

作爲一個不那麼諷刺的評論 - 哪種產品可能會更好 - 開發人員花時間研究客戶需要的功能,還是開發人員花費時間試圖阻止客戶轉向更好的產品? - 這是一個惡性循環。 –

+0

@Damien_The_Unbeliever:這樣做會不會有商業意義?爲什麼應該由我自己的設計構建的數據免費向其他人開放? – CJ7

回答

1

這是一個棘手的並且可能甚至不100%成爲可能。不過,也有一些小技巧來設置它:

  1. 與自定義SA帳戶(包括名稱和密碼)安裝SQL Server的新命名例如。有一種SQL服務器調用「無人蔘與安裝」的安裝方法,它允許您在ini文件中爲SQL Server指定所有安裝參數,然後以靜默方式運行安裝。點擊這裏,查看文檔:Unattended Installation of SQL Server 2008 r2
  2. 與你的魔法SQL安裝腳本創建數據庫,表,程序等(使用,如果你想加密存儲的特效,但他們也被破解)
  3. 添加/驗證架構權限爲定製 SA帳戶並刪除所有管理員角色的所有架構權限。這樣做的目的是,沒有角色有任何架構權限到您的數據庫,只有您的自定義SA 用戶有權(不角色分配,而是直接給用戶)。

我知道有幾個商業應用程序甚至不告訴你他們正在安裝MS SQL Express實例。他們也將使用一個命名的SA帳戶創建自己的命名實例。我不能說我喜歡它作爲一個客戶(因爲SQL在CPU上遇到了問題,我不希望在我的工作站上運行「祕密」實例)。但只要您事先向客戶透露此信息,他們可能會明白。

**請記住,一個熟練的DBA可能具有混淆系統表的知識,以及不能手動授予對數據庫訪問權限的知識。這些技術真的只是「混淆」,並不是100%的防彈。


作爲一個方面說明:可用的第三方datalayers和WebService技術多如牛毛,我想很多公司都在尋找單獨的數據庫架構不是那麼專有或有價值了。曾經有一段時間,數據庫模式本身可能代表了數百小時的編碼。但是現在像EntityFramework,NHibernate,Linq-to-SQL,XPO等工具都可以根據您的軟件類定義和代碼屬性爲您創建數據庫架構。所以只看到一張數據庫表並不是很有價值。另外,您可能會在軟件中編寫大量不在數據庫架構中的業務邏輯,統計分析或其他輔助方法。在我看來,這是在您的軟件的業務邏輯,分析和報告功能中找到了今天的「增值」,而不是在原始數據表中。

這也是爲什麼另一個海報推薦混淆存儲過程的原因,因爲如果您有一些很好的分析和報告過程,那麼這些可能是數據庫模式本身的許多倍。它也是客戶最希望根據自己的報告需求進行定製的。您可能傾向於制定自定義報告只能由您的公司完成的政策(嘿,即使像SAP這樣的大公司也會堅持誰可以修改)。

+1

然而,瑕疵可能會阻止競爭對手的產品將數據從您的產品中提取出來並放入其中。 – CJ7

+0

我授予這個答案,因爲它似乎是最明智的方式來實現我期待的那種朦朧。 – CJ7

5

據我所知, 「沒有」。

「鎖定」最好的辦法你的數據庫是:

1)安裝適當的角色和用戶(理想情況下,SQL角色和SQL用戶創建)

2)明確限制對象在SQL Server權限

3)的代碼,你的應用程序儘可能

4使用SQL Server存儲過程(而不是原始T-SQL))加密存儲過程

這裏的「SQL Server最佳實踐」,可能會感興趣一個很好的鏈接。它討論了安全問題,(相對)的新功能,「用戶架構分離」:

+0

爲什麼使用存儲過程會更加模糊模式? – CJ7

+0

@CraigJ:可以記錄原始SQL,但可以使用訪問權限控制存儲過程。只有你的應用程序的用戶可以運行它們/看到它們。 – cdeszaq

10

掩蓋你的數據庫架構是不讓它離開你的服務器的最佳方式。

即使你加密的模式,你仍然必須從某個地方提供的關鍵,而如果客戶是下定決心要取得它,他們會花時間和金錢去這樣做。

所以你要麼關閉您提供的產品或服務使您的客戶忠誠行善的工作做得更好。

+0

作爲'服務'提供產品是什麼意思?你的意思是像月租費? – CJ7

+1

@CraigJ是的。除非你不能,否則儘量在服務器上留下儘可能多的代碼。最好由瘦客戶端訪問。讓您的客戶支付每月或每年的費用。實際上,這是確保您的代碼安全並且爲您的工作獲得報酬的唯一方法。它也使升級更容易。如果您的應用程序是胖客戶端,請在您的服務器上通過網絡連接創建一些非常重要的功能,僅限用戶使用並且可用。這種分發模式被稱爲[軟件即服務(SaaS)](http://en.wikipedia.org/wiki/Software_as_a_service) – soulcheck

+1

如果你不相信這是唯一的方法,看看MS和所有障礙他們放在窗戶餅乾前面,以及它們到底有多遠。當然,還有其他一些參數,比如更多人對破解版Windows感興趣,但MS中可能會有更多的人與你公司中的破解者作鬥爭。總的來說,浪費時間可以更好地花在實際開發上。 – soulcheck

1

有一種方法,它是複雜和醜陋的,但它的工作原理。

您有一個充當其他表的查找表的主表。這主表看起來有點像這樣:

ID,GUID實體名稱,PARENT_ID

然後所有的表名和列名都被更名爲的GUID。之後,你在查找表中爲它們中的每一個添加一個條目。當你想要選擇數據時,你必須通過它們的實體名稱將GUID從查找表中提取出來,然後再給它提供模糊的表名和列名。

有一個主要的軟件供應商在那裏做一些非常相似的事情,所以它已經完成了。

+0

好主意,但可能對我的情況有點激烈。 – CJ7

+0

@CraigJ說實話,你的整個想法是「激烈的」。 –

+0

我同意這是激烈的我也同意你不應該這樣做。 – dstarh

相關問題