2017-01-16 82 views
1

在正式文檔(3.1:http://neo4j.com/docs/operations-manual/current/security/authentication-authorization/subgraph-access-control/) 據說子圖的訪問控制

「例如,用戶可以被允許讀,但不能寫,標記有僱員節點和類型的Reports_To的關係」

但是沒有它寫在這個頁面上,而其他的如何去做。 通過「調用dbms.procedures()」,我們可以在企業版中看到更多功能,但沒有任何關於定義此子圖控件的信息。

我們考慮更改企業版,但如果我們確信能夠去做。 任何人都可以解釋我或給我的有關文件的地址

感謝

回答

2

的文檔都在那裏。注意:第一句:

通過使用用戶定義的過程自定義角色,一個 管理員可以限制 指定的圖形部分用戶的訪問和後續行動。

對於沒有寫入權限的用戶來說,這種方法似乎是爲他們創建適當的角色,然後創建(或使用現有的)用戶定義的過程來執行允許他們執行的操作。然後將過程的權限配置到適當的級別,並將過程的角色(通​​過修改dbms.security.procedures.roles)與您先前創建的角色相關聯。這允許您創建的過程由您關聯的角色執行。

例如,如果HR用戶沒有寫權限,則可以創建一個過程來創建或刪除:Employee節點之間的REPORTS_TO關係。該過程需要設置爲mode = WRITE,因爲它需要寫入權限。這通常不會由此HR用戶執行,因爲他們沒有寫權限。

但是,如果您創建了一個角色,請說'hr',並將該角色添加到此用戶,並將該過程設置爲可供dbms.security.procedures.roles中的hr角色訪問,那麼hr用戶可以執行此過程,執行必要的寫入操作。

總之,Neo4j的子圖訪問控制沒有在節點或標籤本身上定義,也不適用於在Cypher中執行寫入語句。此訪問控制特定於用戶定義的過程,並允許具有某些角色(如果角色與這些過程相關聯)的用戶執行這些過程,即使他們通常由於其訪問級別而無法訪問。

編輯

,可以爲你工作的最後一件事... Neo4j的具有註冊transaction event handlers可對正在進行的交易進行檢查和邏輯,並拒絕如果一些不符合標準的手段。我會假設你可以在這裏獲得用戶的角色,並且可能檢查某個標籤上的作者操作的事務。奇怪的是,在確保文檔的子圖部分沒有提及這一點。我自己沒有嘗試過這種方法(稍後我會嘗試自己的測試),所以我不確定它是否能夠滿足您的需求,但值得一看。

+0

感謝您的回答。首先,我認爲這是其他程序功能。 我之後將你的解釋真實地表達出來,因爲它完全不符合我們的預期。 創建一個如此難以使用的系統真的很奇怪(編碼java /創建jar,部署,重新啓動服務器) 我們正在尋找更具動態性的,而不是史前的,我們可能使用OrientDB 來重新編寫圖形層, 再次感謝! – user954156

+0

我在交易處理程序中添加了一個可能的替代方案,它也可能適用於您。 – InverseFalcon