diff --git a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java
index fa3ebffda00f7c1c5509529c04fbd47732918852..5488575f3c53ca510b8db43c5cda0d48699abf5b 100644
--- a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java
+++ b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java
@@ -27,42 +27,6 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
         return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
     }
 
-    @Hidden
-    @ResponseStatus(HttpStatus.NOT_FOUND)
-    @ExceptionHandler(ContainerNotFoundException.class)
-    public ResponseEntity<ApiErrorDto> handle(ContainerNotFoundException e, WebRequest request) {
-        final ApiErrorDto response = ApiErrorDto.builder()
-                .status(HttpStatus.NOT_FOUND)
-                .message(e.getLocalizedMessage())
-                .code("error.container.notfound")
-                .build();
-        return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
-    }
-
-    @Hidden
-    @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
-    @ExceptionHandler(NotAllowedException.class)
-    public ResponseEntity<ApiErrorDto> handle(NotAllowedException e, WebRequest request) {
-        final ApiErrorDto response = ApiErrorDto.builder()
-                .status(HttpStatus.METHOD_NOT_ALLOWED)
-                .message(e.getLocalizedMessage())
-                .code("error.container.notallowed")
-                .build();
-        return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
-    }
-
-    @Hidden
-    @ResponseStatus(HttpStatus.BAD_REQUEST)
-    @ExceptionHandler(ImageInvalidException.class)
-    public ResponseEntity<ApiErrorDto> handle(ImageInvalidException e, WebRequest request) {
-        final ApiErrorDto response = ApiErrorDto.builder()
-                .status(HttpStatus.BAD_REQUEST)
-                .message(e.getLocalizedMessage())
-                .code("error.image.invalid")
-                .build();
-        return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
-    }
-
     @Hidden
     @ResponseStatus(HttpStatus.GONE)
     @ExceptionHandler(ContainerAlreadyRemovedException.class)
@@ -99,6 +63,18 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
         return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
     }
 
+    @Hidden
+    @ResponseStatus(HttpStatus.NOT_FOUND)
+    @ExceptionHandler(ContainerNotFoundException.class)
+    public ResponseEntity<ApiErrorDto> handle(ContainerNotFoundException e, WebRequest request) {
+        final ApiErrorDto response = ApiErrorDto.builder()
+                .status(HttpStatus.NOT_FOUND)
+                .message(e.getLocalizedMessage())
+                .code("error.container.notfound")
+                .build();
+        return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
+    }
+
     @Hidden
     @ResponseStatus(HttpStatus.BAD_GATEWAY)
     @ExceptionHandler(ContainerNotRunningException.class)
@@ -118,7 +94,7 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
         final ApiErrorDto response = ApiErrorDto.builder()
                 .status(HttpStatus.CONFLICT)
                 .message(e.getLocalizedMessage())
-                .code("error.container.running")
+                .code("error.container.stillrunning")
                 .build();
         return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
     }
@@ -147,6 +123,18 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
         return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
     }
 
+    @Hidden
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
+    @ExceptionHandler(ImageInvalidException.class)
+    public ResponseEntity<ApiErrorDto> handle(ImageInvalidException e, WebRequest request) {
+        final ApiErrorDto response = ApiErrorDto.builder()
+                .status(HttpStatus.BAD_REQUEST)
+                .message(e.getLocalizedMessage())
+                .code("error.image.invalid")
+                .build();
+        return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
+    }
+
     @Hidden
     @ResponseStatus(HttpStatus.NOT_FOUND)
     @ExceptionHandler(ImageNotFoundException.class)
@@ -159,6 +147,18 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
         return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
     }
 
+    @Hidden
+    @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
+    @ExceptionHandler(NotAllowedException.class)
+    public ResponseEntity<ApiErrorDto> handle(NotAllowedException e, WebRequest request) {
+        final ApiErrorDto response = ApiErrorDto.builder()
+                .status(HttpStatus.METHOD_NOT_ALLOWED)
+                .message(e.getLocalizedMessage())
+                .code("error.container.notallowed")
+                .build();
+        return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
+    }
+
     @Hidden
     @ResponseStatus(HttpStatus.FORBIDDEN)
     @ExceptionHandler(PersistenceException.class)
diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
index 211d5118040e455b121b2321591fc1b08de7f286..88e2943220db0ad616e7534e2658e4c22744756b 100644
--- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
+++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
@@ -5,7 +5,6 @@ import at.tuwien.api.container.ContainerCreateRequestDto;
 import at.tuwien.config.DockerConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.container.Container;
-import at.tuwien.entities.container.image.ContainerImage;
 import at.tuwien.exception.*;
 import at.tuwien.repository.jpa.ContainerRepository;
 import at.tuwien.repository.jpa.ImageRepository;
@@ -55,9 +54,10 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
         /* create networks */
         DockerConfig.createAllNetworks();
         /* mock data */
+        realmRepository.save(REALM_DBREPO);
         userRepository.save(USER_1_SIMPLE);
+        userRepository.save(USER_2_SIMPLE);
         imageRepository.save(IMAGE_1_SIMPLE);
-        realmRepository.save(REALM_DBREPO);
     }
 
     @AfterEach
@@ -81,7 +81,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
         assertEquals(CONTAINER_1_NAME, container.getName());
         assertEquals(USER_1_USERNAME, container.getCreator().getUsername());
         assertEquals(USER_1_USERNAME, container.getOwner().getUsername());
-        assertEquals(1, userRepository.findAll().size());
     }
 
     @Test
diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
index 124a27ebdab6a67514d9191c1a87fa2bee878624..a3f620572aabc234756f2a151c192f7d86e95832 100644
--- a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
+++ b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
@@ -121,6 +121,8 @@ public class ContainerServiceImpl implements ContainerService {
         }
         container.setHash(response1.getId());
         container = containerRepository.save(container);
+        container.setCreator(user);
+        container.setOwner(user);
         log.info("Created container {}", container.getId());
         return container;
     }
diff --git a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java
index d69203d9051e5f5587f8fa8188f9dc0599a256db..27a6c76130c2e77ee3dfe95b84a4e21e15b03646 100644
--- a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java
+++ b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/handlers/ApiExceptionHandler.java
@@ -15,6 +15,18 @@ import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExcep
 @ControllerAdvice
 public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
 
+    @Hidden
+    @ResponseStatus(HttpStatus.FORBIDDEN)
+    @ExceptionHandler(AccessDeniedException.class)
+    public ResponseEntity<ApiErrorDto> handle(AccessDeniedException e, WebRequest request) {
+        final ApiErrorDto response = ApiErrorDto.builder()
+                .status(HttpStatus.FORBIDDEN)
+                .message(e.getLocalizedMessage())
+                .code("error.identifier.accessdenied")
+                .build();
+        return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
+    }
+
     @Hidden
     @ResponseStatus(HttpStatus.NOT_FOUND)
     @ExceptionHandler(DatabaseNotFoundException.class)
@@ -87,6 +99,18 @@ public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
         return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
     }
 
+    @Hidden
+    @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
+    @ExceptionHandler(NotAllowedException.class)
+    public ResponseEntity<ApiErrorDto> handle(NotAllowedException e, WebRequest request) {
+        final ApiErrorDto response = ApiErrorDto.builder()
+                .status(HttpStatus.METHOD_NOT_ALLOWED)
+                .message(e.getLocalizedMessage())
+                .code("error.identifier.notallowed")
+                .build();
+        return new ResponseEntity<>(response, new HttpHeaders(), response.getStatus());
+    }
+
     @Hidden
     @ResponseStatus(HttpStatus.NOT_FOUND)
     @ExceptionHandler(QueryNotFoundException.class)
diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java
index 138ce5ce9ca56df82d2245160a8dbf26f951be8d..831bf171d56a2512a056a6f14fcc6fd0db43e56f 100644
--- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java
+++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java
@@ -6,11 +6,9 @@ import at.tuwien.api.identifier.IdentifierTypeDto;
 import at.tuwien.config.IndexInitializer;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.endpoints.IdentifierEndpoint;
-import at.tuwien.exception.*;
 import at.tuwien.repository.jpa.*;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -58,9 +56,6 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest {
     @Autowired
     private RealmRepository realmRepository;
 
-    @Autowired
-    private AccessRepository accessRepository;
-
     @Autowired
     private IdentifierEndpoint identifierEndpoint;
 
@@ -70,6 +65,8 @@ public class IdentifierEndpointIntegrationTest extends BaseUnitTest {
         realmRepository.save(REALM_DBREPO);
         userRepository.save(USER_1);
         userRepository.save(USER_2);
+        userRepository.save(USER_3);
+        userRepository.save(USER_4);
         containerRepository.save(CONTAINER_1_SIMPLE);
         containerRepository.save(CONTAINER_2_SIMPLE);
         databaseRepository.save(DATABASE_1_SIMPLE);
diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java
index db3137f98672500b4f4ee64d6bdc7dee428fb4c6..8fb1f607d9552021598254f1df8e1c36f34d6b33 100644
--- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java
+++ b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java
@@ -813,6 +813,8 @@ public abstract class BaseTest {
             .hash(CONTAINER_1_HASH)
             .created(CONTAINER_1_CREATED)
             .ipAddress(CONTAINER_1_IP)
+            .createdBy(USER_1_ID)
+            .ownedBy(USER_1_ID)
             .creator(USER_1)
             .owner(USER_1)
             .build();
@@ -826,6 +828,8 @@ public abstract class BaseTest {
             .hash(CONTAINER_1_HASH)
             .created(CONTAINER_1_CREATED)
             .ipAddress(CONTAINER_1_IP)
+            .createdBy(USER_1_ID)
+            .ownedBy(USER_1_ID)
             .creator(null /* for jpa */)
             .owner(null /* for jpa */)
             .build();
@@ -850,6 +854,8 @@ public abstract class BaseTest {
             .hash(CONTAINER_2_HASH)
             .created(CONTAINER_2_CREATED)
             .ipAddress(CONTAINER_2_IP)
+            .createdBy(USER_2_ID)
+            .ownedBy(USER_2_ID)
             .creator(USER_2)
             .owner(USER_2)
             .build();
@@ -863,6 +869,8 @@ public abstract class BaseTest {
             .hash(CONTAINER_2_HASH)
             .created(CONTAINER_2_CREATED)
             .ipAddress(CONTAINER_2_IP)
+            .createdBy(USER_2_ID)
+            .ownedBy(USER_2_ID)
             .creator(null /* for jpa */)
             .owner(null /* for jpa */)
             .build();
@@ -887,6 +895,8 @@ public abstract class BaseTest {
             .hash(CONTAINER_3_HASH)
             .created(CONTAINER_3_CREATED)
             .ipAddress(CONTAINER_3_IP)
+            .createdBy(USER_3_ID)
+            .ownedBy(USER_3_ID)
             .creator(USER_3)
             .owner(USER_3)
             .build();
@@ -900,6 +910,8 @@ public abstract class BaseTest {
             .hash(CONTAINER_3_HASH)
             .created(CONTAINER_3_CREATED)
             .ipAddress(CONTAINER_3_IP)
+            .createdBy(USER_3_ID)
+            .ownedBy(USER_3_ID)
             .creator(null /* for jpa */)
             .owner(null /* for jpa */)
             .build();
@@ -924,6 +936,8 @@ public abstract class BaseTest {
             .hash(CONTAINER_4_HASH)
             .created(CONTAINER_4_CREATED)
             .ipAddress(CONTAINER_4_IP)
+            .createdBy(USER_4_ID)
+            .ownedBy(USER_4_ID)
             .creator(USER_4)
             .owner(USER_4)
             .build();
@@ -937,6 +951,8 @@ public abstract class BaseTest {
             .hash(CONTAINER_4_HASH)
             .created(CONTAINER_4_CREATED)
             .ipAddress(CONTAINER_4_IP)
+            .createdBy(USER_4_ID)
+            .ownedBy(USER_4_ID)
             .creator(null /* for jpa */)
             .owner(null /* for jpa */)
             .build();
@@ -1007,6 +1023,10 @@ public abstract class BaseTest {
             .exchangeName(DATABASE_1_EXCHANGE)
             .created(DATABASE_1_CREATED)
             .lastModified(DATABASE_1_LAST_MODIFIED)
+            .createdBy(USER_1_ID)
+            .ownedBy(USER_1_ID)
+            .contactPerson(USER_1_ID)
+            .contact(USER_1)
             .creator(DATABASE_1_CREATOR)
             .owner(DATABASE_1_OWNER)
             .tables(List.of()) /* TABLE_1, TABLE_2, TABLE_3, TABLE_7 */
@@ -1025,6 +1045,10 @@ public abstract class BaseTest {
             .exchangeName(DATABASE_1_EXCHANGE)
             .created(DATABASE_1_CREATED)
             .lastModified(DATABASE_1_LAST_MODIFIED)
+            .createdBy(USER_1_ID)
+            .ownedBy(USER_1_ID)
+            .contactPerson(USER_1_ID)
+            .contact(null /* for jpa */)
             .creator(null /* for jpa */)
             .owner(null /* for jpa */)
             .tables(List.of() /* for jpa */)
@@ -1124,6 +1148,10 @@ public abstract class BaseTest {
             .exchangeName(DATABASE_2_EXCHANGE)
             .created(DATABASE_2_CREATED)
             .lastModified(DATABASE_2_LAST_MODIFIED)
+            .createdBy(USER_2_ID)
+            .contactPerson(USER_2_ID)
+            .contact(USER_2)
+            .ownedBy(USER_2_ID)
             .creator(DATABASE_2_CREATOR)
             .owner(DATABASE_2_OWNER)
             .tables(List.of()) /* TABLE_4, TABLE_5, TABLE_6 */
@@ -1142,6 +1170,10 @@ public abstract class BaseTest {
             .exchangeName(DATABASE_2_EXCHANGE)
             .created(DATABASE_2_CREATED)
             .lastModified(DATABASE_2_LAST_MODIFIED)
+            .createdBy(USER_2_ID)
+            .ownedBy(USER_2_ID)
+            .contactPerson(USER_1_ID)
+            .contact(null /* for jpa */)
             .creator(null /* for jpa */)
             .owner(null /* for jpa */)
             .tables(List.of() /* for jpa */)
@@ -1247,6 +1279,10 @@ public abstract class BaseTest {
             .exchangeName(DATABASE_3_EXCHANGE)
             .created(DATABASE_3_CREATED)
             .lastModified(DATABASE_3_LAST_MODIFIED)
+            .contactPerson(USER_3_ID)
+            .contact(USER_3)
+            .createdBy(USER_3_ID)
+            .ownedBy(USER_3_ID)
             .creator(DATABASE_3_CREATOR)
             .owner(DATABASE_3_OWNER)
             .tables(List.of()) /* TABLE_8 */
@@ -1265,6 +1301,10 @@ public abstract class BaseTest {
             .exchangeName(DATABASE_3_EXCHANGE)
             .created(DATABASE_3_CREATED)
             .lastModified(DATABASE_3_LAST_MODIFIED)
+            .contactPerson(USER_3_ID)
+            .contact(null /* for jpa */)
+            .createdBy(USER_3_ID)
+            .ownedBy(USER_3_ID)
             .creator(null /* for jpa */)
             .owner(null /* for jpa */)
             .tables(List.of() /* for jpa */)
@@ -1362,6 +1402,10 @@ public abstract class BaseTest {
             .exchangeName(DATABASE_4_EXCHANGE)
             .created(DATABASE_4_CREATED)
             .lastModified(DATABASE_4_LAST_MODIFIED)
+            .contactPerson(USER_4_ID)
+            .contact(USER_4)
+            .createdBy(USER_4_ID)
+            .ownedBy(USER_4_ID)
             .creator(USER_4)
             .owner(USER_4)
             .tables(List.of())
@@ -1380,6 +1424,10 @@ public abstract class BaseTest {
             .exchangeName(DATABASE_4_EXCHANGE)
             .created(DATABASE_4_CREATED)
             .lastModified(DATABASE_4_LAST_MODIFIED)
+            .contactPerson(USER_4_ID)
+            .contact(null /* for jpa */)
+            .createdBy(USER_4_ID)
+            .ownedBy(USER_4_ID)
             .creator(null /* for jpa */)
             .owner(null /* for jpa */)
             .tables(List.of() /* for jpa */)
@@ -1571,6 +1619,7 @@ public abstract class BaseTest {
             .tdbid(DATABASE_1_ID)
             .queueName(TABLE_7_QUEUE_NAME)
             .routingKey(TABLE_7_ROUTING_KEY)
+            .createdBy(USER_1_ID)
             .columns(TABLE_7_COLUMNS)
             .creator(USER_1)
             .created(TABLE_7_CREATED)
@@ -1586,6 +1635,7 @@ public abstract class BaseTest {
             .tdbid(DATABASE_1_ID)
             .queueName(TABLE_7_QUEUE_NAME)
             .routingKey(TABLE_7_ROUTING_KEY)
+            .createdBy(USER_1_ID)
             .columns(List.of() /* for jpa */)
             .creator(null /* for jpa */)
             .created(TABLE_7_CREATED)
@@ -1636,6 +1686,7 @@ public abstract class BaseTest {
                             .autoGenerated(false)
                             .isPrimaryKey(false)
                             .build()))
+            .createdBy(USER_1_ID)
             .creator(USER_1)
             .created(TABLE_8_CREATED)
             .lastModified(TABLE_8_LAST_MODIFIED)
@@ -2482,6 +2533,7 @@ public abstract class BaseTest {
             .tdbid(DATABASE_1_ID)
             .queueName(TABLE_1_QUEUE_NAME)
             .routingKey(TABLE_1_ROUTING_KEY)
+            .createdBy(USER_1_ID)
             .columns(TABLE_1_COLUMNS)
             .constraints(null) /* TABLE_1_CONSTRAINTS */
             .creator(USER_1)
@@ -2500,6 +2552,7 @@ public abstract class BaseTest {
             .tdbid(DATABASE_1_ID)
             .queueName(TABLE_1_QUEUE_NAME)
             .routingKey(TABLE_1_ROUTING_KEY)
+            .createdBy(USER_1_ID)
             .columns(List.of() /* for jpa */)
             .constraints(null /* for jpa */) /* TABLE_1_CONSTRAINTS */
             .creator(null /* for jpa */)
@@ -2561,6 +2614,7 @@ public abstract class BaseTest {
             .tdbid(DATABASE_1_ID)
             .queueName(TABLE_2_QUEUE_NAME)
             .routingKey(TABLE_2_ROUTING_KEY)
+            .createdBy(USER_1_ID)
             .columns(TABLE_2_COLUMNS)
             .creator(USER_1)
             .created(TABLE_2_CREATED)
@@ -2578,6 +2632,7 @@ public abstract class BaseTest {
             .tdbid(DATABASE_1_ID)
             .queueName(TABLE_2_QUEUE_NAME)
             .routingKey(TABLE_2_ROUTING_KEY)
+            .createdBy(USER_1_ID)
             .columns(List.of() /* for jpa */)
             .creator(null /* for jpa */)
             .created(TABLE_2_CREATED)
@@ -3072,6 +3127,7 @@ public abstract class BaseTest {
             .routingKey(TABLE_3_ROUTING_KEY)
             .columns(TABLE_3_COLUMNS)
             .constraints(TABLE_3_CONSTRAINTS)
+            .createdBy(USER_1_ID)
             .creator(USER_1)
             .created(TABLE_3_CREATED)
             .lastModified(TABLE_3_LAST_MODIFIED)
@@ -3090,6 +3146,7 @@ public abstract class BaseTest {
             .routingKey(TABLE_3_ROUTING_KEY)
             .columns(List.of() /* for jpa */)
             .constraints(TABLE_3_CONSTRAINTS)
+            .createdBy(USER_1_ID)
             .creator(null /* for jpa */)
             .created(TABLE_3_CREATED)
             .lastModified(TABLE_3_LAST_MODIFIED)
@@ -3406,6 +3463,7 @@ public abstract class BaseTest {
             .routingKey(TABLE_4_ROUTING_KEY)
             .columns(TABLE_4_COLUMNS)
             .constraints(TABLE_4_CONSTRAINTS)
+            .createdBy(USER_1_ID)
             .creator(USER_1)
             .build();
 
@@ -3518,6 +3576,7 @@ public abstract class BaseTest {
             .routingKey(TABLE_5_ROUTING_KEY)
             .columns(TABLE_5_COLUMNS)
             .constraints(TABLE_5_CONSTRAINTS)
+            .createdBy(USER_1_ID)
             .creator(USER_1)
             .created(TABLE_5_CREATED)
             .lastModified(TABLE_5_LAST_MODIFIED)
@@ -3648,6 +3707,7 @@ public abstract class BaseTest {
             .tdbid(DATABASE_2_ID)
             .queueName(TABLE_6_QUEUE_NAME)
             .routingKey(TABLE_6_ROUTING_KEY)
+            .createdBy(USER_1_ID)
             .columns(TABLE_6_COLUMNS)
             .creator(USER_1)
             .created(TABLE_6_CREATED)
@@ -3664,6 +3724,7 @@ public abstract class BaseTest {
             .tdbid(DATABASE_1_ID)
             .queueName(TABLE_7_QUEUE_NAME)
             .routingKey(TABLE_7_ROUTING_KEY)
+            .createdBy(USER_1_ID)
             .columns(List.of())
             .creator(USER_1)
             .build();
@@ -3686,6 +3747,7 @@ public abstract class BaseTest {
             .vdbid(VIEW_1_DATABASE_ID)
             .isPublic(VIEW_1_PUBLIC)
             .query(VIEW_1_QUERY)
+            .createdBy(USER_1_ID)
             .creator(USER_1)
             .build();
 
@@ -3696,6 +3758,7 @@ public abstract class BaseTest {
             .internalName(VIEW_1_INTERNAL_NAME)
             .vdbid(VIEW_1_DATABASE_ID)
             .isPublic(VIEW_1_PUBLIC)
+            .createdBy(USER_1_ID)
             .query(VIEW_1_QUERY)
             .build();
 
@@ -3718,6 +3781,7 @@ public abstract class BaseTest {
             .isPublic(VIEW_2_PUBLIC)
             .query(VIEW_2_QUERY)
             .creator(USER_1)
+            .createdBy(USER_1_ID)
             .build();
 
     public final static ViewDto VIEW_2_DTO = ViewDto.builder()
@@ -3728,6 +3792,7 @@ public abstract class BaseTest {
             .vdbid(VIEW_2_DATABASE_ID)
             .isPublic(VIEW_2_PUBLIC)
             .query(VIEW_2_QUERY)
+            .createdBy(USER_1_ID)
             .build();
 
     public final static Long VIEW_3_ID = 3L;
@@ -3749,6 +3814,7 @@ public abstract class BaseTest {
             .isPublic(VIEW_3_PUBLIC)
             .query(VIEW_3_QUERY)
             .creator(USER_1)
+            .createdBy(USER_1_ID)
             .build();
 
     public final static ViewDto VIEW_3_DTO = ViewDto.builder()
@@ -3759,6 +3825,7 @@ public abstract class BaseTest {
             .vdbid(VIEW_3_DATABASE_ID)
             .isPublic(VIEW_3_PUBLIC)
             .query(VIEW_3_QUERY)
+            .createdBy(USER_1_ID)
             .build();
 
     public final static Long VIEW_4_ID = 4L;
@@ -3779,6 +3846,8 @@ public abstract class BaseTest {
             .vdbid(VIEW_4_DATABASE_ID)
             .isPublic(VIEW_4_PUBLIC)
             .query(VIEW_4_QUERY)
+            .createdBy(USER_1_ID)
+            .creator(USER_1)
             .build();
 
     public final static Long VIEW_5_ID = 5L;
@@ -3799,6 +3868,8 @@ public abstract class BaseTest {
             .vdbid(VIEW_5_DATABASE_ID)
             .isPublic(VIEW_5_PUBLIC)
             .query(VIEW_5_QUERY)
+            .creator(USER_1)
+            .createdBy(USER_1_ID)
             .build();
 
     public final static Long QUERY_1_RESULT_ID = 1L;
@@ -3904,6 +3975,8 @@ public abstract class BaseTest {
     public final static String IDENTIFIER_1_PUBLISHER = "Austrian Government";
     public final static IdentifierType IDENTIFIER_1_TYPE = IdentifierType.SUBSET;
     public final static IdentifierTypeDto IDENTIFIER_1_TYPE_DTO = IdentifierTypeDto.DATABASE;
+    public final static UUID IDENTIFIER_1_CREATED_BY = USER_1_ID;
+    public final static User IDENTIFIER_1_CREATOR = USER_1;
 
     public final static Creator IDENTIFIER_1_CREATOR_1 = Creator.builder()
             .id(CREATOR_1_ID)
@@ -3912,6 +3985,8 @@ public abstract class BaseTest {
             .lastname(CREATOR_1_LASTNAME)
             .orcid(CREATOR_1_ORCID)
             .affiliation(CREATOR_1_AFFIL)
+            .createdBy(IDENTIFIER_1_CREATED_BY)
+            .creator(IDENTIFIER_1_CREATOR)
             .build();
 
     public final static CreatorDto IDENTIFIER_1_CREATOR_1_DTO = CreatorDto.builder()
@@ -3943,6 +4018,7 @@ public abstract class BaseTest {
             .resultNumber(IDENTIFIER_1_RESULT_NUMBER)
             .publisher(IDENTIFIER_1_PUBLISHER)
             .type(IDENTIFIER_1_TYPE)
+            .createdBy(USER_1_ID)
             .creator(USER_1)
             .creators(List.of(IDENTIFIER_1_CREATOR_1))
             .build();
@@ -3968,6 +4044,7 @@ public abstract class BaseTest {
             .resultNumber(IDENTIFIER_1_RESULT_NUMBER)
             .publisher(IDENTIFIER_1_PUBLISHER)
             .type(IDENTIFIER_1_TYPE)
+            .createdBy(USER_1_ID)
             .creator(null /* for jpa */)
             .creators(List.of() /* for jpa */)
             .build();
@@ -3993,6 +4070,8 @@ public abstract class BaseTest {
             .resultNumber(IDENTIFIER_1_RESULT_NUMBER)
             .publisher(IDENTIFIER_1_PUBLISHER)
             .type(IDENTIFIER_1_TYPE)
+            .creator(USER_1)
+            .createdBy(USER_1_ID)
             .creators(List.of(IDENTIFIER_1_CREATOR_1))
             .build();
 
@@ -4069,6 +4148,8 @@ public abstract class BaseTest {
     public final static String IDENTIFIER_2_PUBLISHER = "Australian Government";
     public final static IdentifierType IDENTIFIER_2_TYPE = IdentifierType.SUBSET;
     public final static IdentifierTypeDto IDENTIFIER_2_TYPE_DTO = IdentifierTypeDto.SUBSET;
+    public final static UUID IDENTIFIER_2_CREATED_BY = USER_2_ID;
+    public final static User IDENTIFIER_2_CREATOR = USER_2;
 
     public final static Creator IDENTIFIER_2_CREATOR_1 = Creator.builder()
             .id(CREATOR_1_ID)
@@ -4077,6 +4158,8 @@ public abstract class BaseTest {
             .lastname(CREATOR_1_LASTNAME)
             .orcid(CREATOR_1_ORCID)
             .affiliation(CREATOR_1_AFFIL)
+            .createdBy(IDENTIFIER_2_CREATED_BY)
+            .creator(IDENTIFIER_2_CREATOR)
             .build();
 
     public final static CreatorDto IDENTIFIER_2_CREATOR_1_DTO = CreatorDto.builder()
@@ -4094,6 +4177,8 @@ public abstract class BaseTest {
             .lastname(CREATOR_2_LASTNAME)
             .orcid(CREATOR_2_ORCID)
             .affiliation(CREATOR_2_AFFIL)
+            .createdBy(IDENTIFIER_2_CREATED_BY)
+            .creator(IDENTIFIER_2_CREATOR)
             .build();
 
     public final static CreatorDto IDENTIFIER_2_CREATOR_2_DTO = CreatorDto.builder()
@@ -4126,6 +4211,7 @@ public abstract class BaseTest {
             .resultNumber(IDENTIFIER_2_RESULT_NUMBER)
             .publisher(IDENTIFIER_2_PUBLISHER)
             .type(IDENTIFIER_2_TYPE)
+            .createdBy(USER_2_ID)
             .creator(USER_2)
             .creators(List.of(IDENTIFIER_2_CREATOR_1, IDENTIFIER_2_CREATOR_2))
             .build();
@@ -4152,6 +4238,7 @@ public abstract class BaseTest {
             .resultNumber(IDENTIFIER_2_RESULT_NUMBER)
             .publisher(IDENTIFIER_2_PUBLISHER)
             .type(IDENTIFIER_2_TYPE)
+            .createdBy(USER_2_ID)
             .creator(null /* for jpa */)
             .creators(List.of() /* for jpa */)
             .build();
@@ -4366,6 +4453,8 @@ public abstract class BaseTest {
     public final static String IDENTIFIER_3_PUBLISHER = "Norwegian Government";
     public final static IdentifierType IDENTIFIER_3_TYPE = IdentifierType.SUBSET;
     public final static IdentifierTypeDto IDENTIFIER_3_TYPE_DTO = IdentifierTypeDto.SUBSET;
+    public final static UUID IDENTIFIER_3_CREATOR_ID = USER_3_ID;
+    public final static User IDENTIFIER_3_CREATOR = USER_3;
 
     public final static Creator IDENTIFIER_3_CREATOR_1 = Creator.builder()
             .id(CREATOR_1_ID)
@@ -4374,6 +4463,8 @@ public abstract class BaseTest {
             .lastname(CREATOR_1_LASTNAME)
             .orcid(CREATOR_1_ORCID)
             .affiliation(CREATOR_1_AFFIL)
+            .createdBy(IDENTIFIER_3_CREATOR_ID)
+            .creator(IDENTIFIER_3_CREATOR)
             .build();
 
     public final static CreatorDto IDENTIFIER_3_CREATOR_1_DTO = CreatorDto.builder()
@@ -4391,6 +4482,8 @@ public abstract class BaseTest {
             .lastname(CREATOR_2_LASTNAME)
             .orcid(CREATOR_2_ORCID)
             .affiliation(CREATOR_2_AFFIL)
+            .createdBy(IDENTIFIER_3_CREATOR_ID)
+            .creator(IDENTIFIER_3_CREATOR)
             .build();
 
     public final static CreatorDto IDENTIFIER_3_CREATOR_2_DTO = CreatorDto.builder()
@@ -4408,6 +4501,8 @@ public abstract class BaseTest {
             .lastname(CREATOR_3_LASTNAME)
             .orcid(CREATOR_3_ORCID)
             .affiliation(CREATOR_3_AFFIL)
+            .createdBy(IDENTIFIER_3_CREATOR_ID)
+            .creator(IDENTIFIER_3_CREATOR)
             .build();
 
     public final static CreatorDto IDENTIFIER_3_CREATOR_3_DTO = CreatorDto.builder()
@@ -4440,7 +4535,8 @@ public abstract class BaseTest {
             .resultNumber(IDENTIFIER_3_RESULT_NUMBER)
             .publisher(IDENTIFIER_3_PUBLISHER)
             .type(IDENTIFIER_3_TYPE)
-            .creator(USER_3)
+            .createdBy(IDENTIFIER_3_CREATOR_ID)
+            .creator(IDENTIFIER_3_CREATOR)
             .creators(List.of(IDENTIFIER_3_CREATOR_1, IDENTIFIER_3_CREATOR_2, IDENTIFIER_3_CREATOR_3))
             .build();
 
@@ -4466,6 +4562,7 @@ public abstract class BaseTest {
             .resultNumber(IDENTIFIER_3_RESULT_NUMBER)
             .publisher(IDENTIFIER_3_PUBLISHER)
             .type(IDENTIFIER_3_TYPE)
+            .createdBy(USER_3_ID)
             .creator(null /* for jpa */)
             .creators(List.of() /* for jpa */)
             .build();
@@ -4556,6 +4653,8 @@ public abstract class BaseTest {
     public final static Long IDENTIFIER_4_RESULT_NUMBER = 2L;
     public final static String IDENTIFIER_4_PUBLISHER = "Swedish Government";
     public final static IdentifierType IDENTIFIER_4_TYPE = IdentifierType.DATABASE;
+    public final static UUID IDENTIFIER_4_CREATOR_ID = USER_4_ID;
+    public final static User IDENTIFIER_4_CREATOR = USER_4;
 
     public final static Identifier IDENTIFIER_4 = Identifier.builder()
             .id(IDENTIFIER_4_ID)
@@ -4578,6 +4677,7 @@ public abstract class BaseTest {
             .resultNumber(IDENTIFIER_4_RESULT_NUMBER)
             .publisher(IDENTIFIER_4_PUBLISHER)
             .type(IDENTIFIER_4_TYPE)
+            .createdBy(USER_3_ID)
             .creator(USER_3)
             .creators(List.of())
             .build();
@@ -4603,6 +4703,7 @@ public abstract class BaseTest {
             .resultNumber(IDENTIFIER_4_RESULT_NUMBER)
             .publisher(IDENTIFIER_4_PUBLISHER)
             .type(IDENTIFIER_4_TYPE)
+            .createdBy(USER_3_ID)
             .creator(null /* for jpa */)
             .creators(List.of() /* for jpa */)
             .build();
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java
index c356639c9d23b08854d38e140b5a31e9a0c2c922..ff6762bcbe721cf34b12c54526b1f6cdfbcb0e44 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java
@@ -13,10 +13,9 @@ import at.tuwien.gateway.BrokerServiceGateway;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
 import at.tuwien.querystore.Query;
 import at.tuwien.repository.jpa.DatabaseAccessRepository;
-import at.tuwien.repository.jpa.IdentifierRepository;
+import at.tuwien.repository.jpa.UserRepository;
 import at.tuwien.service.AccessService;
 import at.tuwien.service.DatabaseService;
-import at.tuwien.service.QueryService;
 import at.tuwien.service.impl.StoreServiceImpl;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
@@ -54,11 +53,9 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexInitializer;
 
-    /* keep */
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
 
-    /* keep */
     @MockBean
     private BrokerServiceGateway brokerServiceGateway;
 
@@ -77,6 +74,9 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
     @MockBean
     private AccessService accessService;
 
+    @MockBean
+    private UserRepository userRepository;
+
     @Test
     @WithAnonymousUser
     public void findAll_anonymous_succeeds() throws QueryStoreException, DatabaseNotFoundException, ImageNotSupportedException,
@@ -108,10 +108,6 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
     @WithMockUser(username = USER_1_USERNAME, authorities = {"list-queries"})
     public void findAll_noAccess_fails() {
 
-        /* mock */
-        when(accessRepository.findByDatabaseIdAndUsername(DATABASE_2_ID, USER_1_USERNAME))
-                .thenReturn(Optional.of(DATABASE_1_RESEARCHER_READ_ACCESS));
-
         /* test */
         assertThrows(NotAllowedException.class, () -> {
             findAll_generic(CONTAINER_2_ID, DATABASE_2_ID, DATABASE_2, USER_1_PRINCIPAL);
@@ -150,134 +146,111 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
         findAll_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, USER_3_PRINCIPAL);
     }
 
-    @Test
-    public void find_anonymous_succeeds() throws QueryStoreException, QueryNotFoundException, DatabaseNotFoundException,
-            ImageNotSupportedException, UserNotFoundException, NotAllowedException, DatabaseConnectionException {
-
-        /* test */
-        final QueryDto response = find_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_1_ID, null, null);
-        assertEquals(QUERY_1_ID, response.getId());
-        assertEquals(QUERY_1_STATEMENT, response.getQuery());
-    }
-
     @Test
     @WithAnonymousUser
-    public void find_anonymous2_succeeds() throws QueryStoreException, QueryNotFoundException, DatabaseNotFoundException,
+    public void find_anonymous_succeeds() throws QueryStoreException, QueryNotFoundException, DatabaseNotFoundException,
             ImageNotSupportedException, UserNotFoundException, NotAllowedException, DatabaseConnectionException {
 
-        /* test */
-        final QueryDto response = find_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_1_ID, null, null);
-        assertEquals(QUERY_1_ID, response.getId());
-        assertEquals(QUERY_1_STATEMENT, response.getQuery());
-    }
-
-    @Test
-    @WithMockUser(username = USER_1_USERNAME, roles = "RESEARCHER")
-    public void find_researcher_succeeds() throws QueryStoreException, QueryNotFoundException, DatabaseNotFoundException,
-            ImageNotSupportedException, UserNotFoundException, NotAllowedException, DatabaseConnectionException {
+        /* mock */
+        when(userRepository.findByUsername(USER_1_USERNAME))
+                .thenReturn(Optional.of(USER_1));
 
         /* test */
-        final QueryDto response = find_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_1_ID, USER_1, USER_1_PRINCIPAL);
+        final QueryDto response = find_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_1_USERNAME, null, null);
         assertEquals(QUERY_1_ID, response.getId());
         assertEquals(QUERY_1_STATEMENT, response.getQuery());
     }
 
     @Test
-    @WithMockUser(username = USER_2_USERNAME, roles = "DATA_STEWARD")
-    public void find_dataSteward_succeeds() throws QueryStoreException, QueryNotFoundException, DatabaseNotFoundException,
+    @WithMockUser(username = USER_1_USERNAME, authorities = "find-query")
+    public void find_hasRole_succeeds() throws QueryStoreException, QueryNotFoundException, DatabaseNotFoundException,
             ImageNotSupportedException, UserNotFoundException, NotAllowedException, DatabaseConnectionException {
 
         /* test */
-        final QueryDto response = find_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_2_ID, USER_2, USER_2_PRINCIPAL);
+        final QueryDto response = find_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_1_USERNAME, USER_1, USER_1_PRINCIPAL);
         assertEquals(QUERY_1_ID, response.getId());
         assertEquals(QUERY_1_STATEMENT, response.getQuery());
     }
 
     @Test
-    @WithMockUser(username = USER_3_USERNAME, roles = "DEVELOPER")
-    public void find_developer_succeeds() throws QueryStoreException, QueryNotFoundException, DatabaseNotFoundException,
+    @WithMockUser(username = USER_1_USERNAME)
+    public void find_noRole_succeeds() throws QueryStoreException, QueryNotFoundException, DatabaseNotFoundException,
             ImageNotSupportedException, UserNotFoundException, NotAllowedException, DatabaseConnectionException {
 
         /* test */
-        final QueryDto response = find_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_3_ID, USER_3, USER_3_PRINCIPAL);
+        final QueryDto response = find_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_1_USERNAME, USER_1, USER_1_PRINCIPAL);
         assertEquals(QUERY_1_ID, response.getId());
         assertEquals(QUERY_1_STATEMENT, response.getQuery());
     }
 
     @Test
-    @WithMockUser(username = USER_1_USERNAME, roles = "RESEARCHER")
+    @WithMockUser(username = USER_1_USERNAME, authorities = "find-query")
     public void find_notFound_fails() {
 
         /* test */
         assertThrows(QueryNotFoundException.class, () -> {
-            find_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, null, USER_1_ID, USER_1, USER_1_PRINCIPAL);
+            find_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, null, USER_1_USERNAME, USER_1, USER_1_PRINCIPAL);
         });
     }
 
     @Test
-    @WithMockUser(username = USER_1_USERNAME, roles = "RESEARCHER")
+    @WithMockUser(username = USER_1_USERNAME, authorities = "find-query")
     public void find_databaseNotFound_fails() {
 
         /* test */
         assertThrows(NotAllowedException.class, () -> {
-            find_generic(CONTAINER_1_ID, DATABASE_1_ID, null, QUERY_1_ID, QUERY_1, USER_1_ID, USER_1, USER_1_PRINCIPAL);
-        });
-    }
-
-    @Test
-    public void persist_publicAnonymous_fails() {
-
-        /* test */
-        assertThrows(NotAllowedException.class, () -> {
-            persist_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, null, null, null);
-        });
-    }
-
-    @Test
-    public void persist_publicRead_fails() {
-
-        /* test */
-        assertThrows(NotAllowedException.class, () -> {
-            persist_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_2_USERNAME, USER_2_PRINCIPAL, DATABASE_1_RESEARCHER_READ_ACCESS);
+            find_generic(CONTAINER_1_ID, DATABASE_1_ID, null, QUERY_1_ID, QUERY_1, USER_1_USERNAME, USER_1, USER_1_PRINCIPAL);
         });
     }
 
     @Test
-    public void persist_publicWriteOwn_fails() {
+    @WithMockUser(username = USER_1_USERNAME, authorities = "persist-query")
+    public void persist_ownRead_succeeds() throws UserNotFoundException, QueryStoreException,
+            NotAllowedException, DatabaseConnectionException, QueryAlreadyPersistedException, QueryNotFoundException,
+            DatabaseNotFoundException, ImageNotSupportedException {
 
         /* test */
-        assertThrows(NotAllowedException.class, () -> {
-            persist_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_2_USERNAME, USER_2_PRINCIPAL, DATABASE_1_RESEARCHER_WRITE_OWN_ACCESS);
-        });
+        final QueryDto response = persist_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_1_USERNAME, USER_1, USER_1_PRINCIPAL, DATABASE_1_RESEARCHER_READ_ACCESS);
+        assertEquals(QUERY_1_ID, response.getId());
+        assertEquals(QUERY_1_STATEMENT, response.getQuery());
     }
 
     @Test
-    public void persist_publicWriteAll_succeeds() throws UserNotFoundException, QueryStoreException,
+    @WithMockUser(username = USER_1_USERNAME, authorities = "persist-query")
+    public void persist_ownWriteOwn_succeeds() throws UserNotFoundException, QueryStoreException,
             NotAllowedException, DatabaseConnectionException, QueryAlreadyPersistedException, QueryNotFoundException,
             DatabaseNotFoundException, ImageNotSupportedException {
 
         /* test */
-        final QueryDto response = persist_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_2_USERNAME, USER_2_PRINCIPAL, DATABASE_1_RESEARCHER_WRITE_ALL_ACCESS);
+        final QueryDto response = persist_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_1_USERNAME, USER_1, USER_1_PRINCIPAL, DATABASE_1_RESEARCHER_WRITE_OWN_ACCESS);
         assertEquals(QUERY_1_ID, response.getId());
         assertEquals(QUERY_1_STATEMENT, response.getQuery());
     }
 
     @Test
-    public void persist_publicWriteAllAlreadyPersisted_succeeds() {
+    @WithMockUser(username = USER_1_USERNAME, authorities = "persist-query")
+    public void persist_ownWriteAll_succeeds() throws UserNotFoundException, QueryStoreException,
+            NotAllowedException, DatabaseConnectionException, QueryAlreadyPersistedException, QueryNotFoundException,
+            DatabaseNotFoundException, ImageNotSupportedException {
 
         /* test */
-        assertThrows(QueryAlreadyPersistedException.class, () -> {
-            persist_generic(CONTAINER_2_ID, DATABASE_2_ID, DATABASE_2, QUERY_2_ID, QUERY_2, USER_2_USERNAME, USER_2_PRINCIPAL, DATABASE_2_RESEARCHER_WRITE_ALL_ACCESS);
-        });
+        final QueryDto response = persist_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_1_USERNAME, USER_1, USER_1_PRINCIPAL, DATABASE_1_RESEARCHER_WRITE_ALL_ACCESS);
+        assertEquals(QUERY_1_ID, response.getId());
+        assertEquals(QUERY_1_STATEMENT, response.getQuery());
     }
 
     @Test
-    public void persist_publicOwner_succeeds() throws UserNotFoundException, QueryStoreException,
+    @WithMockUser(username = USER_2_USERNAME, authorities = "persist-query")
+    public void persist_foreignWriteAll_succeeds() throws UserNotFoundException, QueryStoreException,
             NotAllowedException, DatabaseConnectionException, QueryAlreadyPersistedException, QueryNotFoundException,
             DatabaseNotFoundException, ImageNotSupportedException {
 
+        /* mock */
+        when(userRepository.findByUsername(USER_1_USERNAME))
+                .thenReturn(Optional.of(USER_1));
+
         /* test */
-        final QueryDto response = persist_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_1_USERNAME, USER_1_PRINCIPAL, DATABASE_1_RESEARCHER_WRITE_ALL_ACCESS);
+        final QueryDto response = persist_generic(CONTAINER_1_ID, DATABASE_1_ID, DATABASE_1, QUERY_1_ID, QUERY_1, USER_2_USERNAME, USER_2, USER_2_PRINCIPAL, DATABASE_1_DEVELOPER_WRITE_ALL_ACCESS);
         assertEquals(QUERY_1_ID, response.getId());
         assertEquals(QUERY_1_STATEMENT, response.getQuery());
     }
@@ -287,7 +260,7 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
     /* ################################################################################################### */
 
     protected QueryDto persist_generic(Long containerId, Long databaseId, Database database, Long queryId, Query query,
-                                       String username, Principal principal, DatabaseAccess access)
+                                       String username, User user, Principal principal, DatabaseAccess access)
             throws DatabaseNotFoundException, UserNotFoundException, QueryStoreException, QueryNotFoundException,
             ImageNotSupportedException, NotAllowedException, DatabaseConnectionException,
             QueryAlreadyPersistedException {
@@ -308,6 +281,8 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
             when(accessService.find(databaseId, username))
                     .thenThrow(NotAllowedException.class);
         }
+        when(userRepository.findByUsername(username))
+                .thenReturn(Optional.of(user));
 
         /* test */
         final ResponseEntity<QueryDto> response = storeEndpoint.persist(containerId, databaseId, queryId, principal);
@@ -337,7 +312,7 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
     }
 
     protected QueryDto find_generic(Long containerId, Long databaseId, Database database, Long queryId, Query query,
-                                    UUID userId, User user, Principal principal) throws QueryStoreException,
+                                    String username, User user, Principal principal) throws QueryStoreException,
             QueryNotFoundException, DatabaseNotFoundException, ImageNotSupportedException, UserNotFoundException,
             NotAllowedException, DatabaseConnectionException {
 
@@ -356,6 +331,13 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
             when(databaseService.find(containerId, databaseId))
                     .thenThrow(DatabaseNotFoundException.class);
         }
+        if (user != null) {
+            when(userRepository.findByUsername(username))
+                    .thenReturn(Optional.of(user));
+        } else {
+            when(userRepository.findByUsername(username))
+                    .thenReturn(Optional.empty());
+        }
 
         /* test */
         final ResponseEntity<QueryDto> response = storeEndpoint.find(CONTAINER_1_ID, DATABASE_1_ID, QUERY_1_ID, principal);