2011-03-06 14 views
1

我目前正在開發一個項目,其中需要將數據庫與JAVA API一起打包。從某種意義上說,數據庫應該是安全的,除了API之外,沒有人能夠訪問它。重點在於數據庫中的數據是知識產權,不應該暴露。這裏有一個問題。該數據庫包含大約500萬條記錄(僅限4-5列)。我需要根據帶聚合函數的索引字段來查詢它。我很清楚存在Java嵌入式數據庫,如derby,hsql和他們的喜歡。但我嚴重懷疑他們的表現。我知道這個要求聽起來很奇怪。但至少是一個開始。在API中綁定數據庫

的API是爲了併發訪問,並需要檢索查找值從這個database.Is這真的是一個很好的設計或者是有什麼毛病approach.Any architectureal建議,歡迎

NewInfo:如果嵌入式數據庫看起來並不大有希望,那麼嵌入式文件如何與API一起使用。這是可行的嗎?

回答

2

如果你要發佈數據庫,你不會阻止人們直接訪問它。這只是DRM,正如我們從長期的經驗中知道的那樣,DRM 不起作用

保持數據私密性的最簡單方法是將其保留在您控制的服務器上,並提供網絡API。這也可以讓你使用你選擇的數據庫。

如果你確實保留在客戶端上,我認爲你會發現嵌入式數據庫的性能比你期望的要好。另一個好的選擇是SQLite。

我不確定你需要什麼類型的併發。您是否設想在給定客戶端同時訪問數據庫的多個程序?

+0

借鑑@Matthew Flaschen和@denisk的建議 - 將數據庫存儲在您控制的服務器上,並通過網絡連接訪問它,或者加密數據庫並訪問auth服務器以訪問。 – cofiem 2011-03-06 08:01:35

+0

感謝您的info.I設想多個程序同時使用API​​,這意味着同時訪問數據庫。不幸的是,由於安全偏執狂,我無法通過網絡託管數據。數據必須位於客戶端。那裏有一項技術可以解決這個問題嗎?或者我想錯了? – Franklin 2011-03-06 09:58:44

+0

如何將所有數據分發給每個客戶端更安全?只提供所需數據的安全API似乎好得多。沒有(* working *)技術給客戶端數據,然後告訴他他不能使用它。沒有多少鍵會改變這個基本事實。至於併發性,你可以從[這個問題]開始(http://stackoverflow.com/questions/1438817/which-embedded-database-has-maximum-sql-compliance-and-concurrency-support)。 – 2011-03-08 21:28:25

1

我會使用H2數據庫與純JDBC API API。 H2是ultra fast並支持encryption。出於安全原因,您可以將密鑰存儲到其他地方的加密數據庫(在某些auth服務器上?)。你可能無法找到比純JDBC更快的東西。

+0

auth服務器如何解決任何問題?磁盤上仍然需要某種身份驗證令牌,並且基本上成爲解密密鑰。一旦單個令牌遭到破壞,您的數據庫就會向全世界開放。我不明白爲什麼「純粹的JDBC」很重要。 JDBC只是一個API。如果你編寫一個速度非常快的C數據庫,那麼你在JDBC包裝器上花費的時間在查詢時間旁邊將是微不足道的。 – 2011-03-06 08:04:56

+0

我不認爲這是有史以來最好的解決方案 - 很明顯,DB應該超出系統的合理安全級別。但要滿足可能的要求。 在大多數情況下,純JDBC會比例如ORM解決方案(例如Hibernate)更快。我們不是在這裏談論C。 – 2011-03-06 10:01:27

0

我同意馬修的觀點,你根本無法阻止用戶訪問它。如果你使用標準的數據庫引擎,你也可以非常容易。你幾乎只能加密數據,然後將其解密到內存中,以便查詢它。

SQLite是一個很好的嵌入式數據庫,但併發性很差。 HSQL,德比或其他任何應該工作得很好,如果你可以保存在內存中。

+0

您可能已經意識到這一點,但顯而易見的問題是,您要在哪裏存儲解密密鑰? – 2011-03-06 08:02:13

+0

只要它不能被簡單地訪問就足夠了。 – 2011-03-06 08:51:06