mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 16:36:21 +02:00
Native CLI i18n: The TrustGraph CLI has built-in translation support that dynamically loads language strings. You can test and use different languages by simply passing the --lang flag (e.g., --lang es for Spanish, --lang ru for Russian) or by configuring your environment's LANG variable. Automated Docs Translations: This PR introduces autonomously translated Markdown documentation into several target languages, including Spanish, Swahili, Portuguese, Turkish, Hindi, Hebrew, Arabic, Simplified Chinese, and Russian.
223 lines
14 KiB
Markdown
223 lines
14 KiB
Markdown
---
|
||
layout: default
|
||
title: "Поддержка изоляции пользователя/коллекции в Neo4j"
|
||
parent: "Russian (Beta)"
|
||
---
|
||
|
||
# Поддержка изоляции пользователя/коллекции в Neo4j
|
||
|
||
> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
|
||
|
||
## Формулировка проблемы
|
||
|
||
Текущая реализация хранения и запросов в Neo4j не обеспечивает изоляцию пользователя/коллекции, что создает проблему безопасности многопользовательской среды. Все тройки хранятся в одном графе без каких-либо механизмов для предотвращения доступа пользователей к данным других пользователей или смешения коллекций.
|
||
|
||
В отличие от других бэкендов хранения в TrustGraph:
|
||
- **Cassandra**: использует отдельные пространства ключей для каждого пользователя и таблицы для каждой коллекции.
|
||
- **Vector-хранилища** (Milvus, Qdrant, Pinecone): используют пространства имен, специфичные для коллекции.
|
||
- **Neo4j**: в настоящее время все данные хранятся в одном графе (уязвимость для безопасности).
|
||
|
||
## Текущая архитектура
|
||
|
||
### Модель данных
|
||
- **Узлы**: метка `:Node` с свойством `uri`, метка `:Literal` с свойством `value`
|
||
- **Отношения**: метка `:Rel` с свойством `uri`
|
||
- **Индексы**: `Node.uri`, `Literal.value`, `Rel.uri`
|
||
|
||
### Поток сообщений
|
||
- Сообщения `Triples` содержат поля `metadata.user` и `metadata.collection`
|
||
- Сервис хранения получает информацию о пользователе/коллекции, но игнорирует ее
|
||
- Сервис запросов ожидает `user` и `collection` в `TriplesQueryRequest`, но игнорирует их
|
||
|
||
### Текущая проблема безопасности
|
||
```cypher
|
||
# Любой пользователь может запросить любые данные - нет изоляции
|
||
MATCH (src:Node)-[rel:Rel]->(dest:Node)
|
||
RETURN src.uri, rel.uri, dest.uri
|
||
```
|
||
|
||
## Предлагаемое решение: Фильтрация на основе свойств (Рекомендуется)
|
||
|
||
### Обзор
|
||
Добавьте свойства `user` и `collection` ко всем узлам и отношениям, а затем фильтруйте все операции по этим свойствам. Этот подход обеспечивает надежную изоляцию, сохраняя при этом гибкость запросов и обратную совместимость.
|
||
|
||
### Изменения в модели данных
|
||
|
||
#### Улучшенная структура узла
|
||
```cypher
|
||
// Узел
|
||
CREATE (n:Node {
|
||
uri: "http://example.com/entity1",
|
||
user: "john_doe",
|
||
collection: "production_v1"
|
||
})
|
||
|
||
// Литеральные сущности
|
||
CREATE (n:Literal {
|
||
value: "literal value",
|
||
user: "john_doe",
|
||
collection: "production_v1"
|
||
})
|
||
```
|
||
|
||
#### Улучшенная структура отношений
|
||
```cypher
|
||
// Отношения с свойствами user/collection
|
||
CREATE (src)-[:Rel {
|
||
uri: "http://example.com/predicate1",
|
||
user: "john_doe",
|
||
collection: "production_v1"
|
||
}]->(dest)
|
||
```
|
||
|
||
#### Обновленные индексы
|
||
```cypher
|
||
// Комплексные индексы для эффективного фильтра
|
||
CREATE INDEX node_user_collection_uri FOR (n:Node) ON (n.user, n.collection, n.uri);
|
||
CREATE INDEX literal_user_collection_value FOR (n:Literal) ON (n.user, n.collection, n.value);
|
||
CREATE INDEX rel_user_collection_uri FOR ()-[r:Rel]-() ON (r.user, r.collection, r.uri);
|
||
|
||
// Сохранение существующих индексов для обратной совместимости (необязательно)
|
||
CREATE INDEX Node_uri FOR (n:Node) ON (n.uri);
|
||
CREATE INDEX Literal_value FOR (n:Literal) ON (n.value);
|
||
CREATE INDEX Rel_uri FOR ()-[r:Rel]-() ON (r.uri);
|
||
```
|
||
|
||
### Изменения в реализации
|
||
|
||
#### Сервис хранения (`write.py`)
|
||
|
||
**Текущий код:**
|
||
```python
|
||
def create_node(self, uri):
|
||
summary = self.io.execute_query(
|
||
"MERGE (n:Node {uri: $uri})",
|
||
uri=uri, database_=self.db,
|
||
).summary
|
||
```
|
||
|
||
**Обновленный код:**
|
||
```python
|
||
def create_node(self, uri, user, collection):
|
||
summary = self.io.execute_query(
|
||
"MERGE (n:Node {uri: $uri})",
|
||
uri=uri, user=user, collection=collection, database_=self.db,
|
||
).summary
|
||
```
|
||
|
||
#### Сервис запросов
|
||
- Добавьте фильтры для user и collection в запросы, чтобы обеспечить изоляцию.
|
||
|
||
### План реализации
|
||
|
||
### Этап 1: Основа (Неделя 1)
|
||
1. [ ] Обновление сервиса хранения для приема и хранения свойств user/collection
|
||
2. [ ] Создание комплексных индексов для эффективного запроса
|
||
3. [ ] Реализация обратной совместимости
|
||
4. [ ] Создание модульных тестов для новой функциональности
|
||
|
||
### Этап 2: Обновление запросов (Неделя 2)
|
||
1. [ ] Обновление всех шаблонов запросов для включения фильтров user/collection
|
||
2. [ ] Добавление валидации запросов и мер безопасности
|
||
3. [ ] Обновление интеграционных тестов
|
||
4. [ ] Тестирование производительности с запросами, отфильтрованными
|
||
|
||
### Этап 3: Миграция и развертывание (Неделя 3)
|
||
1. [ ] Создание скриптов миграции для существующих экземпляров Neo4j
|
||
2. [ ] Документация и руководства по развертыванию
|
||
3. [ ] Мониторинг и оповещения об изоляции
|
||
4. [ ] Тестирование конвейера
|
||
|
||
### Этап 4: Усиление (Неделя 4)
|
||
1. [ ] Удаление режима обратной совместимости
|
||
2. [ ] Добавление комплексной журнализации
|
||
3. [ ] Проверка безопасности и тестирование на проникновение
|
||
4. [ ] Оптимизация производительности
|
||
|
||
## Стратегия тестирования
|
||
|
||
### Модульные тесты
|
||
```python
|
||
def test_user_collection_isolation():
|
||
# Храним тройки для user1/collection1
|
||
processor.store_triples(triples_user1_coll1)
|
||
|
||
# Храним тройки для user2/collection2
|
||
processor.store_triples(triples_user2_coll2)
|
||
|
||
# Запрос как user1 должен возвращать только данные user1
|
||
results = processor.query_triples(query_user1_coll1)
|
||
assert all_results_belong_to_user1_coll1(results)
|
||
|
||
# Запрос как user2 должен возвращать только данные user2
|
||
results = processor.query_triples(query_user2_coll2)
|
||
assert all_results_belong_to_user2_coll2(results)
|
||
```
|
||
|
||
### Интеграционные тесты
|
||
- Сценарии многопользовательского взаимодействия с перекрывающимися данными
|
||
- Запросы к перекрестным коллекциям (должны завершаться неудачей)
|
||
- Тестирование миграции с существующими данными
|
||
- Тестирование производительности с большими наборами данных
|
||
|
||
### Тесты безопасности
|
||
- Попытки запросить данные других пользователей
|
||
- Атаки SQL injection на параметры user/collection
|
||
- Проверка полной изоляции при различных шаблонах запросов
|
||
|
||
## Соображения производительности
|
||
|
||
### Стратегия индексирования
|
||
- Комплексные индексы на `(user, collection, uri)` для оптимальной фильтрации
|
||
- Рассмотрите частичные индексы, если некоторые коллекции значительно больше
|
||
- Отслеживайте использование и производительность индекса
|
||
|
||
### Оптимизация запросов
|
||
- Используйте EXPLAIN для проверки использования индекса в запросах, отфильтрованных по user/collection
|
||
- Рассмотрите кэширование результатов запросов для часто используемых данных
|
||
- Профилируйте использование памяти с большим количеством пользователей/коллекций
|
||
|
||
### Масштабируемость
|
||
- Каждая комбинация пользователя/коллекции создает отдельные "острова данных"
|
||
- Отслеживайте размер базы данных и использование пула соединений
|
||
- Рассмотрите стратегии горизонтального масштабирования, если необходимо
|
||
|
||
## Безопасность и соответствие
|
||
|
||
### Гарантии изоляции данных
|
||
- **Физическая**: Все данные пользователя хранятся с явными свойствами user/collection
|
||
- **Логическая**: Все запросы фильтруются по контексту user/collection
|
||
- **Контроль доступа**: Уровень сервиса обеспечивает проверку доступа
|
||
|
||
### Требования к отчетности
|
||
- Отслеживайте доступ к данным с контекстом user/collection
|
||
- Отслеживайте активности миграции и перемещения данных
|
||
- Мониторинг попыток нарушить изоляцию
|
||
|
||
### Соображения соответствия
|
||
- GDPR: Улучшенная возможность находить и удалять данные, специфичные для пользователя
|
||
- SOC2: Четкая изоляция и контроль доступа
|
||
- HIPAA: Сильная изоляция для данных о здравоохранении
|
||
|
||
## Риски и смягчающие факторы
|
||
|
||
| Риск | Влияние | Вероятность | Смягчение |
|
||
|------|--------|------------|------------|
|
||
| Отсутствие фильтра user/collection в запросе | Высокий | Средняя | Обязательная валидация, комплексное тестирование |
|
||
| Снижение производительности | Средний | Низкая | Оптимизация индекса, профилирование запросов |
|
||
| Повреждение данных во время миграции | Высокий | Низкая | Стратегия резервного копирования, процедуры отката |
|
||
| Уязвимость для безопасности | Высокий | Низкая | Проверка безопасности, тестирование на проникновение |
|
||
|
||
## Критерии успеха
|
||
|
||
1. **Безопасность**: Полная изоляция данных между пользователями в производственной среде
|
||
2. **Производительность**: <10% влияния на производительность запросов по сравнению с нефильтрованными запросами
|
||
3. **Миграция**: 100% данных существующего экземпляра Neo4j успешно мигрированы без потерь
|
||
4. **Удобство использования**: Все существующие шаблоны запросов работают с контекстом user/collection
|
||
5. **Соответствие**: Полный журнал доступа к данным с контекстом user/collection
|
||
|
||
## Заключение
|
||
|
||
Предлагаемый подход на основе фильтрации свойств обеспечивает наилучший баланс между безопасностью, производительностью и удобством обслуживания для добавления изоляции пользователя/коллекции в Neo4j. Он соответствует существующим многопользовательским шаблонам TrustGraph, одновременно используя возможности Neo4j в области запросов и индексирования графов.
|
||
|
||
Это решение гарантирует, что бэкенд Neo4j TrustGraph соответствует тем же стандартам безопасности, что и другие бэкенды, обеспечивая при этом изоляцию данных, одновременно сохраняя гибкость и мощь запросов графов.
|