NoSQL或者Not Only SQL(不僅僅是SQL)是一種數據存儲和檢索方法,對于開發(fā)交互式Web應用的初創(chuàng)公司和處理大量數據的企業(yè)而言,這是非?!皶r髦”的方法。這種方法受歡迎的主要原因是:與傳統(tǒng)關系型數據庫管理系統(tǒng)(RDBMS)相比(包括甲骨文的MySQL和微軟的SQL Server),它提供更好的可擴展性和可用性,以及更快的訪問數據。
RDBMS中的數據需要是可預測的,因此數據可以存儲在有結構的表和行中,通過不同元素之間定義關系。另一方面,NoSQL數據庫中的數據則不需要如此結構化或者按照固定的模式。當性能和實時訪問比一致性更重要時,例如當索引和檢索大量記錄時,NoSQL比關系型數據庫更適合。在NoSQL中,數據也可以更容易地跨多個服務器存儲,因而提供更好的容錯性和可擴展性。谷歌和亞馬遜等公司是使用自己的云友好型NoSQL數據庫技術,現在有很多商業(yè)和開源NoSQL數據庫可供企業(yè)選擇,例如Couchbase、MongoDB、Cassandra和Riak。
盡管數據存儲在NoSQL數據庫中有諸多優(yōu)點,但快速方便地訪問數據的需要嚴重影響了NoSQL安全。為了安全地存儲信息,數據庫需要提供保密性、完整性和可用性(CIA)。企業(yè)RDBMS數據庫通過集成的安全功能提供CIA功能,例如基于角色的安全、加密通信、支持行和列訪問控制,以及通過預先設定的程序,用戶級權限的訪問控制。RDBMS數據庫還具有ACID(原子性、一致、隔離、耐用)功能來保證數據庫交易的可靠處理;數據復制和日志記錄確保耐用和數據完整。由于這些功能增加了檢索大量數據所花費的時間,所以它們沒有部署在NoSQL數據庫中。
為了保證對數據的快速訪問,NoSQL數據庫基本沒有內置安全性。它們有BASE(基本可用、軟態(tài)、最終一致)的屬性;不需要每次傳輸后的一致性,該數據庫只需要最終達到一致狀態(tài)。例如,當用戶查看數據時,比如存儲條目的數量,用戶會看到數據的最后一次快照,而不是當前視圖。因為數據交易沒有立即寫入到數據庫中,同時進行的交易可能會互相干擾。這種固有的爭用情況(用戶不一定在同一時間看到相同數據)意味著NoSQL數據庫永遠不會用于處理金融交易。
NoSQL數據庫還缺乏保密性和安全性。由于NoSQL數據庫沒有固定的模式,對表、列或行的權限不能被隔離。這也可能導致相同數據出現多個副本。這會讓該數據庫很難保持數據的一致性,特別是對多個表格的更改不能包裝到一個交易中,因為其插入、升級或刪除操作的邏輯單元是作為整體來執(zhí)行。
現在有超過20種不同的NoSQL部署,缺乏標準也讓保持數據安全的更復雜。保密性和完整性必須完全由訪問NoSQL數據的應用來提供。對于任何在應用級有價值的數據,只設置最后一道防線并不是正確的做法。應用開發(fā)人員并不擅長部署安全功能,新代碼通常意味著新漏洞。發(fā)送到NoSQL數據庫的任何請求都需要進行轉義、過濾和驗證,而數據庫本身需要位于強壯的環(huán)境中。
有趣的是,一些NoSQL項目現在開始添加RDBMS類型的安全功能。例如,甲骨文對寫入到一個節(jié)點的數據增加了事務性控制。Cassandra支持交易記錄和自動復制,而MongoDB支持主從復制。
如果可擴展性和可用性是企業(yè)對數據庫的主要要求,那么,NoSQL可能是某些大型數據集的最佳選擇。然而,系統(tǒng)架構師在選擇NoSQL數據庫之前,應該仔細考慮他們對安全、隱私和數據完整性的需求。缺乏NoSQL安全功能,即身份驗證或認證支持,意味著敏感數據最好保存在傳統(tǒng)RDBMS中。
更多信息請查看IT技術專欄