有沒有什麼辦法來隱藏SQL Server上的數據庫模式?掩蓋SQL Server數據庫模式的方法?
如果我在客戶端站點上安裝了SQL Server Express,是否有辦法模糊架構和數據,以便其他人無法前來學習架構以便將數據從其中提取出來並存入其他產品中?
有沒有什麼辦法來隱藏SQL Server上的數據庫模式?掩蓋SQL Server數據庫模式的方法?
如果我在客戶端站點上安裝了SQL Server Express,是否有辦法模糊架構和數據,以便其他人無法前來學習架構以便將數據從其中提取出來並存入其他產品中?
這是一個棘手的並且可能甚至不100%成爲可能。不過,也有一些小技巧來設置它:
我知道有幾個商業應用程序甚至不告訴你他們正在安裝MS SQL Express實例。他們也將使用一個命名的SA帳戶創建自己的命名實例。我不能說我喜歡它作爲一個客戶(因爲SQL在CPU上遇到了問題,我不希望在我的工作站上運行「祕密」實例)。但只要您事先向客戶透露此信息,他們可能會明白。
**請記住,一個熟練的DBA可能具有混淆系統表的知識,以及不能手動授予對數據庫訪問權限的知識。這些技術真的只是「混淆」,並不是100%的防彈。
作爲一個方面說明:可用的第三方datalayers和WebService技術多如牛毛,我想很多公司都在尋找單獨的數據庫架構不是那麼專有或有價值了。曾經有一段時間,數據庫模式本身可能代表了數百小時的編碼。但是現在像EntityFramework,NHibernate,Linq-to-SQL,XPO等工具都可以根據您的軟件類定義和代碼屬性爲您創建數據庫架構。所以只看到一張數據庫表並不是很有價值。另外,您可能會在軟件中編寫大量不在數據庫架構中的業務邏輯,統計分析或其他輔助方法。在我看來,這是在您的軟件的業務邏輯,分析和報告功能中找到了今天的「增值」,而不是在原始數據表中。
這也是爲什麼另一個海報推薦混淆存儲過程的原因,因爲如果您有一些很好的分析和報告過程,那麼這些可能是數據庫模式本身的許多倍。它也是客戶最希望根據自己的報告需求進行定製的。您可能傾向於制定自定義報告只能由您的公司完成的政策(嘿,即使像SAP這樣的大公司也會堅持誰可以修改)。
據我所知, 「沒有」。
「鎖定」最好的辦法你的數據庫是:
1)安裝適當的角色和用戶(理想情況下,SQL角色和SQL用戶您創建)
2)明確限制對象在SQL Server權限
3)的代碼,你的應用程序儘可能
4使用SQL Server存儲過程(而不是原始T-SQL))加密存儲過程
這裏的「SQL Server最佳實踐」,可能會感興趣一個很好的鏈接。它討論了安全問題,(相對)的新功能,「用戶架構分離」:
掩蓋你的數據庫架構是不讓它離開你的服務器的最佳方式。
即使你加密的模式,你仍然必須從某個地方提供的關鍵,而如果客戶是下定決心要取得它,他們會花時間和金錢去這樣做。
所以你要麼關閉您提供的產品或服務使您的客戶忠誠行善的工作做得更好。
作爲'服務'提供產品是什麼意思?你的意思是像月租費? – CJ7
@CraigJ是的。除非你不能,否則儘量在服務器上留下儘可能多的代碼。最好由瘦客戶端訪問。讓您的客戶支付每月或每年的費用。實際上,這是確保您的代碼安全並且爲您的工作獲得報酬的唯一方法。它也使升級更容易。如果您的應用程序是胖客戶端,請在您的服務器上通過網絡連接創建一些非常重要的功能,僅限用戶使用並且可用。這種分發模式被稱爲[軟件即服務(SaaS)](http://en.wikipedia.org/wiki/Software_as_a_service) – soulcheck
如果你不相信這是唯一的方法,看看MS和所有障礙他們放在窗戶餅乾前面,以及它們到底有多遠。當然,還有其他一些參數,比如更多人對破解版Windows感興趣,但MS中可能會有更多的人與你公司中的破解者作鬥爭。總的來說,浪費時間可以更好地花在實際開發上。 – soulcheck
是的,沒有什麼比將客戶鎖定到升級路徑更好。他們喜歡這個。 –
作爲一個不那麼諷刺的評論 - 哪種產品可能會更好 - 開發人員花時間研究客戶需要的功能,還是開發人員花費時間試圖阻止客戶轉向更好的產品? - 這是一個惡性循環。 –
@Damien_The_Unbeliever:這樣做會不會有商業意義?爲什麼應該由我自己的設計構建的數據免費向其他人開放? – CJ7