> **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.
A implementação atual de armazenamento e consulta de triplas do Neo4j carece de isolamento de usuário/coleção, o que cria um problema de segurança de multi-inquilinato. Todas as triplas são armazenadas no mesmo espaço de grafo sem nenhum mecanismo para impedir que os usuários acessem os dados de outros usuários ou misturem coleções.
Ao contrário de outros backends de armazenamento no TrustGraph:
**Cassandra**: Usa key spaces separados por usuário e tabelas por coleção.
**Armazenamentos vetoriais** (Milvus, Qdrant, Pinecone): Usam namespaces específicos para cada coleção.
**Neo4j**: Atualmente compartilha todos os dados em um único grafo (vulnerabilidade de segurança).
## Arquitetura Atual
### Modelo de Dados
**Nós**: Rótulo `:Node` com propriedade `uri`, rótulo `:Literal` com propriedade `value`.
**Relacionamentos**: Rótulo `:Rel` com propriedade `uri`.
Mensagens `Triples` contêm campos `metadata.user` e `metadata.collection`.
O serviço de armazenamento recebe informações de usuário/coleção, mas as ignora.
O serviço de consulta espera `user` e `collection` em `TriplesQueryRequest`, mas os ignora.
### Problema de Segurança Atual
```cypher
# Any user can query any data - no isolation
MATCH (src:Node)-[rel:Rel]->(dest:Node)
RETURN src.uri, rel.uri, dest.uri
```
## Solução Proposta: Filtragem Baseada em Propriedades (Recomendada)
### Visão Geral
Adicione as propriedades `user` e `collection` a todos os nós e relacionamentos, e então filtre todas as operações por essas propriedades. Essa abordagem fornece um forte isolamento, mantendo a flexibilidade da consulta e a compatibilidade com versões anteriores.
### Alterações no Modelo de Dados
#### Estrutura de Nó Aprimorada
```cypher
// Node entities
CREATE (n:Node {
uri: "http://example.com/entity1",
user: "john_doe",
collection: "production_v1"
})
// Literal entities
CREATE (n:Literal {
value: "literal value",
user: "john_doe",
collection: "production_v1"
})
```
#### Estrutura de Relacionamento Aprimorada
```cypher
// Relationships with user/collection properties
CREATE (src)-[:Rel {
uri: "http://example.com/predicate1",
user: "john_doe",
collection: "production_v1"
}]->(dest)
```
#### Índices Atualizados
```cypher
// Compound indexes for efficient filtering
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);
// Maintain existing indexes for backwards compatibility (optional)
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);
Testes de desempenho com grandes conjuntos de dados
### Testes de Segurança
Tentativa de consultar dados de outros usuários
Ataques de injeção de SQL em parâmetros de usuário/coleção
Verificar o isolamento completo sob vários padrões de consulta
## Considerações de Desempenho
### Estratégia de Indexação
Índices compostos em `(user, collection, uri)` para filtragem otimizada
Considere índices parciais se algumas coleções forem muito maiores
Monitore o uso de índices e o desempenho das consultas
### Otimização de Consultas
Use EXPLAIN para verificar o uso de índices em consultas filtradas
Considere o cache de resultados de consulta para dados acessados com frequência
Monitore o uso de memória com um grande número de usuários/coleções
### Escalabilidade
Cada combinação de usuário/coleção cria ilhas de dados separadas
Monitore o tamanho do banco de dados e o uso do pool de conexões
Considere estratégias de escalabilidade horizontal, se necessário
## Segurança e Conformidade
### Garantias de Isolamento de Dados
**Físico**: Todos os dados do usuário armazenados com propriedades explícitas de usuário/coleção
**Lógico**: Todas as consultas filtradas pelo contexto de usuário/coleção
**Controle de Acesso**: A validação no nível do serviço impede o acesso não autorizado
### Requisitos de Auditoria
Registre todo o acesso a dados com o contexto de usuário/coleção
Rastreie atividades de migração e movimentação de dados
Monitore tentativas de violação de isolamento
### Considerações de Conformidade
GDPR: Capacidade aprimorada de localizar e excluir dados específicos do usuário
SOC2: Isolamento claro de dados e controles de acesso
HIPAA: Forte isolamento de locatários para dados de saúde
## Riscos e Mitigações
| Risco | Impacto | Probabilidade | Mitigação |
|------|--------|------------|------------|
| Consulta sem o filtro de usuário/coleção | Alto | Médio | Validação obrigatória, testes abrangentes |
| Degradação de desempenho | Médio | Baixo | Otimização de índice, análise de desempenho |
| Corrupção de dados durante a migração | Alto | Baixo | Estratégia de backup, procedimentos de reversão |
| Consultas complexas entre várias coleções | Médio | Médio | Documente padrões de consulta, forneça exemplos |
## Critérios de Sucesso
1.**Segurança**: Zero acesso a dados de outros usuários em produção
2.**Desempenho**: Impacto de <10%nodesempenhodaconsultaemcomparaçãocomconsultasnãofiltradas
3.**Migração**: 100% dos dados existentes migrados com sucesso e sem perda
4.**Usabilidade**: Todos os padrões de consulta existentes funcionam com o contexto de usuário/coleção
5.**Conformidade**: Rastreamento completo de acesso a dados de usuário/coleção
## Conclusão
A abordagem de filtragem baseada em propriedades oferece o melhor equilíbrio entre segurança, desempenho e manutenção para adicionar o isolamento de usuário/coleção ao Neo4j. Ela se alinha aos padrões de multilocação existentes do TrustGraph, aproveitando os pontos fortes do Neo4j em consultas de grafos e indexação.
Esta solução garante que o backend do Neo4j do TrustGraph atenda aos mesmos padrões de segurança de outros backends de armazenamento, prevenindo vulnerabilidades de isolamento de dados, mantendo a flexibilidade e o poder das consultas de grafos.