2014-03-26 61 views
0

我希望對包含在Neo4j數據庫中的數據實施安全性,使其達到單個節點和/或關係的級別。保護Neo4j查詢訪問的數據

大部分數據將會提供給所有用戶,但有些數據將受到用戶角色的限制。我可以爲要限制的數據添加屬性或標籤。

我想允許用戶針對數據運行自定義密碼查詢,但隱藏用戶未被授權查看的任何數據。

如果我必須從外面做一些事情,那麼我不僅必須過濾返回的結果,還必須解析並限制或修改針對數據運行的所有查詢,以防止用戶編寫查詢哪些數據作用於他們不被允許查看。

理想的解決方案是,如果存在低級掛鉤,它允許在密碼查詢作用於這些記錄之前攔截讀取節點和關係。攔截器將執行安全檢查,如果它們失敗,那麼它的行爲就好像該節點或關係根本不存在。即相同的密碼查詢根據誰運行它會有不同的結果。這將適用於所有可能的查詢,例如計數(n)不僅僅是那些返回節點/關係的。

可以這樣做嗎?如果它不被支持,那麼在代碼中是否有合適的位置可以添加這樣的安全過濾器,還是需要進行很多代碼更改?

謝謝,達蒙

+0

這肯定不是目前支持的Neo4j與Cypher支架,並且不太可能的東西可以添加平凡。您可能會實現自己的外觀和查詢API,而不是通過Cypher爲用戶提供直接訪問。 –

回答

1

正如克里斯說,它肯定不是在數據庫級別微不足道,但如果你正在尋找應用層面的解決方案,你可能有一個看Structr,在頂部的框架,與Neo4j緊密集成。

它提供了基於ACL,具有用戶,組和不同訪問級別的節點級安全性。 Structr中的安全性在儘可能最低的級別上實現,即f.e.如果查詢用戶具有適當的訪問權限,我們只實例化對象。

所有較高的訪問級別(如REST API和UI)都只能查看用戶上下文中可用的記錄。

[1] http://structr.orghttps://github.com/structr/structr

+0

謝謝阿克塞爾。我們一定會看看這個。它也可能解決我們在Neo4j中遇到的其他一些問題。 –