e8850549d2
* Decouple BoltSession and communication::bolt::Session * Add CREATE/USE/DROP DATABASE * Add SHOW DATABASES * Cover WebSocket session * Simple session safety implemented via RWLock * Storage symlinks for backward. compatibility * Extend the audit log with the DB info * Add auth part * Add tenant recovery
136 lines
6.8 KiB
YAML
136 lines
6.8 KiB
YAML
bolt_port: &bolt_port "7687"
|
|
create_delete_filtering_cluster: &create_delete_filtering_cluster
|
|
cluster:
|
|
main:
|
|
args: ["--bolt-port", "7687", "--log-level=TRACE"]
|
|
log_file: "fine_grained_access.log"
|
|
setup_queries:
|
|
[
|
|
"CREATE USER admin IDENTIFIED BY 'test';",
|
|
"CREATE USER user IDENTIFIED BY 'test';",
|
|
"GRANT ALL PRIVILEGES TO admin;",
|
|
"GRANT DATABASE * TO admin;",
|
|
"GRANT ALL PRIVILEGES TO user;",
|
|
"GRANT DATABASE * TO user;",
|
|
]
|
|
|
|
edge_type_filtering_cluster: &edge_type_filtering_cluster
|
|
cluster:
|
|
main:
|
|
args: ["--bolt-port", *bolt_port, "--log-level=TRACE"]
|
|
log_file: "fine_grained_access.log"
|
|
setup_queries:
|
|
[
|
|
"CREATE USER admin IDENTIFIED BY 'test';",
|
|
"CREATE USER user IDENTIFIED BY 'test';",
|
|
"GRANT ALL PRIVILEGES TO admin;",
|
|
"GRANT DATABASE * TO admin;",
|
|
"GRANT ALL PRIVILEGES TO user;",
|
|
"GRANT DATABASE * TO user;",
|
|
"GRANT CREATE_DELETE ON LABELS * TO admin;",
|
|
"GRANT CREATE_DELETE ON EDGE_TYPES * TO admin;",
|
|
"MERGE (l1:label1 {name: 'test1'});",
|
|
"MERGE (l2:label2 {name: 'test2'});",
|
|
"MATCH (l1:label1),(l2:label2) WHERE l1.name = 'test1' AND l2.name = 'test2' CREATE (l1)-[r:edgeType1]->(l2);",
|
|
"MERGE (l3:label3 {name: 'test3'});",
|
|
"MATCH (l1:label1),(l3:label3) WHERE l1.name = 'test1' AND l3.name = 'test3' CREATE (l1)-[r:edgeType2]->(l3);",
|
|
"MERGE (mix:label3:label1 {name: 'test4'});",
|
|
"MATCH (l1:label1),(mix:label3) WHERE l1.name = 'test1' AND mix.name = 'test4' CREATE (l1)-[r:edgeType2]->(mix);",
|
|
"CREATE DATABASE clean;",
|
|
"USE DATABASE clean",
|
|
"MATCH (n) DETACH DELETE n;",
|
|
"MERGE (l1:label1 {name: 'test1'});",
|
|
"MERGE (l2:label2 {name: 'test2'});",
|
|
"MATCH (l1:label1),(l2:label2) WHERE l1.name = 'test1' AND l2.name = 'test2' CREATE (l1)-[r:edgeType1]->(l2);",
|
|
"MERGE (l3:label3 {name: 'test3'});",
|
|
"MATCH (l1:label1),(l3:label3) WHERE l1.name = 'test1' AND l3.name = 'test3' CREATE (l1)-[r:edgeType2]->(l3);",
|
|
"MERGE (mix:label3:label1 {name: 'test4'});",
|
|
"MATCH (l1:label1),(mix:label3) WHERE l1.name = 'test1' AND mix.name = 'test4' CREATE (l1)-[r:edgeType2]->(mix);",
|
|
"USE DATABASE memgraph",
|
|
]
|
|
validation_queries: []
|
|
|
|
path_filtering_cluster: &path_filtering_cluster
|
|
cluster:
|
|
main:
|
|
args: ["--bolt-port", "7687", "--log-level=TRACE"]
|
|
log_file: "fine_grained_access.log"
|
|
setup_queries:
|
|
[
|
|
"CREATE USER admin IDENTIFIED BY 'test';",
|
|
"CREATE USER user IDENTIFIED BY 'test';",
|
|
"GRANT ALL PRIVILEGES TO admin;",
|
|
"GRANT DATABASE * TO admin;",
|
|
"GRANT ALL PRIVILEGES TO user;",
|
|
"GRANT DATABASE * TO user;",
|
|
"MERGE (a:label0 {id: 0}) MERGE (b:label1 {id: 1}) CREATE (a)-[:edge_type_1 {weight: 6}]->(b);",
|
|
"MERGE (a:label0 {id: 0}) MERGE (b:label2 {id: 2}) CREATE (a)-[:edge_type_1 {weight: 14}]->(b);",
|
|
"MERGE (a:label1 {id: 1}) MERGE (b:label2 {id: 2}) CREATE (a)-[:edge_type_2 {weight: 1}]->(b);",
|
|
"MERGE (a:label2 {id: 2}) MERGE (b:label3 {id: 4}) CREATE (a)-[:edge_type_2 {weight: 10}]->(b);",
|
|
"MERGE (a:label1 {id: 1}) MERGE (b:label3 {id: 3}) CREATE (a)-[:edge_type_3 {weight: 5}]->(b);",
|
|
"MERGE (a:label2 {id: 2}) MERGE (b:label3 {id: 3}) CREATE (a)-[:edge_type_3 {weight: 7}]->(b);",
|
|
"MERGE (a:label3 {id: 3}) MERGE (b:label3 {id: 4}) CREATE (a)-[:edge_type_4 {weight: 1}]->(b);",
|
|
"MERGE (a:label3 {id: 4}) MERGE (b:label3 {id: 3}) CREATE (a)-[:edge_type_4 {weight: 1}]->(b);",
|
|
"MERGE (a:label3 {id: 3}) MERGE (b:label4 {id: 5}) CREATE (a)-[:edge_type_4 {weight: 14}]->(b);",
|
|
"MERGE (a:label3 {id: 4}) MERGE (b:label4 {id: 5}) CREATE (a)-[:edge_type_4 {weight: 8}]->(b);",
|
|
"CREATE DATABASE clean;",
|
|
"USE DATABASE clean",
|
|
"MATCH (n) DETACH DELETE n;",
|
|
"MERGE (a:label0 {id: 0}) MERGE (b:label1 {id: 1}) CREATE (a)-[:edge_type_1 {weight: 6}]->(b);",
|
|
"MERGE (a:label0 {id: 0}) MERGE (b:label2 {id: 2}) CREATE (a)-[:edge_type_1 {weight: 14}]->(b);",
|
|
"MERGE (a:label1 {id: 1}) MERGE (b:label2 {id: 2}) CREATE (a)-[:edge_type_2 {weight: 1}]->(b);",
|
|
"MERGE (a:label2 {id: 2}) MERGE (b:label3 {id: 4}) CREATE (a)-[:edge_type_2 {weight: 10}]->(b);",
|
|
"MERGE (a:label1 {id: 1}) MERGE (b:label3 {id: 3}) CREATE (a)-[:edge_type_3 {weight: 5}]->(b);",
|
|
"MERGE (a:label2 {id: 2}) MERGE (b:label3 {id: 3}) CREATE (a)-[:edge_type_3 {weight: 7}]->(b);",
|
|
"MERGE (a:label3 {id: 3}) MERGE (b:label3 {id: 4}) CREATE (a)-[:edge_type_4 {weight: 1}]->(b);",
|
|
"MERGE (a:label3 {id: 4}) MERGE (b:label3 {id: 3}) CREATE (a)-[:edge_type_4 {weight: 1}]->(b);",
|
|
"MERGE (a:label3 {id: 3}) MERGE (b:label4 {id: 5}) CREATE (a)-[:edge_type_4 {weight: 14}]->(b);",
|
|
"MERGE (a:label3 {id: 4}) MERGE (b:label4 {id: 5}) CREATE (a)-[:edge_type_4 {weight: 8}]->(b);",
|
|
"USE DATABASE memgraph",
|
|
]
|
|
|
|
show_databases_w_user: &show_databases_w_user
|
|
cluster:
|
|
main:
|
|
args: ["--bolt-port", "7687", "--log-level=TRACE"]
|
|
log_file: "fine_grained_access.log"
|
|
setup_queries:
|
|
[
|
|
"CREATE USER admin IDENTIFIED BY 'test';",
|
|
"CREATE USER user IDENTIFIED BY 'test';",
|
|
"CREATE USER user2 IDENTIFIED BY 'test';",
|
|
"CREATE USER user3 IDENTIFIED BY 'test';",
|
|
"CREATE DATABASE db1;",
|
|
"CREATE DATABASE db2;",
|
|
"GRANT ALL PRIVILEGES TO admin;",
|
|
"GRANT DATABASE * TO admin;",
|
|
"GRANT ALL PRIVILEGES TO user;",
|
|
"GRANT DATABASE db1 TO user;",
|
|
"GRANT ALL PRIVILEGES TO user2;",
|
|
"GRANT DATABASE db2 TO user2;",
|
|
"REVOKE DATABASE memgraph FROM user2;",
|
|
"SET MAIN DATABASE db2 FOR user2",
|
|
"GRANT ALL PRIVILEGES TO user3;",
|
|
"GRANT DATABASE * TO user3;",
|
|
"REVOKE DATABASE memgraph FROM user3;",
|
|
"SET MAIN DATABASE db1 FOR user3",
|
|
]
|
|
|
|
workloads:
|
|
- name: "Create delete filtering"
|
|
binary: "tests/e2e/pytest_runner.sh"
|
|
args: ["fine_grained_access/create_delete_filtering_tests.py"]
|
|
<<: *create_delete_filtering_cluster
|
|
- name: "EdgeType filtering"
|
|
binary: "tests/e2e/pytest_runner.sh"
|
|
args: ["fine_grained_access/edge_type_filtering_tests.py"]
|
|
<<: *edge_type_filtering_cluster
|
|
- name: "Path filtering"
|
|
binary: "tests/e2e/pytest_runner.sh"
|
|
args: ["fine_grained_access/path_filtering_tests.py"]
|
|
<<: *path_filtering_cluster
|
|
- name: "Show databases with users"
|
|
binary: "tests/e2e/pytest_runner.sh"
|
|
args: ["fine_grained_access/show_db.py"]
|
|
<<: *show_databases_w_user
|