2013-10-27 2 views
3

Я использую neo4j 1.9.4, и я хотел бы отобразить некоторую информацию о графике на (общедоступном) веб-сайте, используя neo4jphp. Для получения некоторых данных я использую запросы cypher в neo4jphp. Эти запросы, очевидно, только считывают данные с графика.neo4j: authentication - только разрешить чтение запросов cypher

Я должен убедиться, что посетители веб-сайта не могут изменять любые данные на графике. Поэтому я установил плагин authentication-extension и создал двух пользователей (один с RO «только для чтения» и один с правами доступа «RW» для чтения и записи), как там описано. Однако запросы cypher в neo4jphp работают только для пользователя с правами RW, но не для тех, у кого есть права RO.

Я знаю, что http://docs.neo4j.org/chunked/stable/security-server.html#_security_in_depth в значительной степени объясняет, как обеспечить безопасность neo4j, но я абсолютно не могу понять, как это сделать. Особенно интересен раздел «произвольный_код_экзакция», но я не знаю, как его использовать.

Как я могу достичь того, что запросы чтения cypher могут быть выполнены с веб-сервера? BTW: веб-сервер (для отображения некоторых результатов) и neo4j работают на другой машине.

Буду признателен за любую помощь, спасибо!

EDIT: Мой сценарий на самом деле не такой сложный, поэтому я уверен, что для этого должно быть решение: от localhost предоставляется любой доступ (чтение записи), тогда как доступ с удаленного веб-сервера ограничен чтение с графика. Как я могу это достичь? Если это невозможно: как я могу ограничить доступ с удаленного веб-сервера к некоторым предопределенным (cypher) запросам, где пользователь может указать только некоторые параметры?

ответ

1

Вы должны использовать апачский прокси, как описано в http://docs.neo4j.org/chunked/stable/security-server.html#_security_in_depth

Информация вам нужно, это URL, чтобы опубликовать Cypher запрос:

http://localhost:7474/db/data/cypher 

neo4php только обертка и будет в конечном итоге размещения на этот адрес , Вы можете найти более подробную информацию: http://docs.neo4j.org/chunked/milestone/rest-api-cypher.html

Таким образом, в основном это означает, что вы разрешаете запросы с URL-адресом cypher иметь доступ к серверу neo4j.


Относительно только для чтения Cypher запросы:

Я не проверял с neo4jphp, но если вы используете REST API напрямую, вы можете установить базу данных для READ_ONLY путем добавления к Conf/neo4j.properties:

read_only=true 

Вы можете проверить в WebAdmin, что сервер действительно находится в режиме READ_ONLY

enter image description here

Просто тестировал, сервер будет принимать только запросы чтения:

enter image description here

И возвратит следующий ответ

{ 
"message": "Expected to be in a transaction at this point", 
"exception": "InternalException", 
"fullname": "org.neo4j.cypher.InternalException", 
"stacktrace": 
[...], 
"fullname" : "org.neo4j.graphdb.NotInTransactionException" 
} 
+0

Благодарим вас за советы. Однако этот подход не помогает мне ограничить доступ к чтению запросов cypher, правильно? По крайней мере, я не могу понять, как различать запрос чтения и письма cypher. – user2752625

+0

Вы можете увидеть ответ на cypher только для чтения. Если neo4jphp не позволяет вам это сделать, вам нужно будет написать свою собственную оболочку для своих запросов cypher. Это не должно быть очень сложно. Я полагаю, вы можете использовать curl с php. – bendaizer

+0

Еще раз спасибо. У меня уже был этот подход, но если я прав, * read_only * - это глобальный параметр, который также ограничивает доступ к localhost - и именно здесь я хочу разрешить доступ на запись. Поэтому я думаю, что это действительно не помогает мне. – user2752625

1

Альтернативный способ заключается в использовании плагин Cypher-RS.Существует ветвь 1.9.

Это позволяет создавать конечные точки, которые в сущности представляют собой один запрос cypher. (Таким образом, запрос должен быть предопределен).

Вы можете использовать mod proxy для ограничения только этих предопределенных запросов. Я не уверен, что mod proxy позволяет ограничивать только запросы GET, но если это так, вы можете разрешить доступ к запросам GET для плагина, поскольку он не позволит запросам на изменение быть GET-запросами.

https://github.com/jexp/cypher-rs

+0

Это звучит действительно интересно. Я попробую, спасибо за сообщение! – user2752625

Смежные вопросы