diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6028862ea5145d9084a6fedb341eac3aadad192e..66bb59f7ec1322671cfe70feb003a4c37095ae84 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -130,6 +130,7 @@ test-default-deployment:
     - "make teardown"
     - "rm -f .env"
     - "docker compose up -d || docker compose down"
+    - "make teardown"
   coverage: '/TOTAL.*?([0-9]{1,3})%/'
 
 test-env-deployment:
@@ -140,6 +141,7 @@ test-env-deployment:
     - "make teardown"
     - "cp .env.unix.example .env"
     - "docker compose up -d || docker compose down"
+    - "make teardown"
 
 scan-analyse-service:
   stage: scan-docker
diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java
index ced4aa34104430d9e31cb96d6adaab026ce4bf92..ecd68ec53e613be9739ebbf80b20958aafb4cf28 100644
--- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java
+++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/UserEndpoint.java
@@ -106,7 +106,7 @@ public class UserEndpoint {
     })
     public ResponseEntity<UserBriefDto> create(@NotNull @Valid @RequestBody SignupRequestDto data)
             throws UserAlreadyExistsException, UserEmailAlreadyExistsException, UserNotFoundException,
-            KeycloakRemoteException, AccessDeniedException, BrokerRemoteException {
+            KeycloakRemoteException, AccessDeniedException, BrokerRemoteException, BrokerVirtualHostCreationException {
         log.debug("endpoint create a user, data={}", data);
         /* check */
         userService.validateUsernameNotExists(data.getUsername());
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java
index e783f9b1ca9b2411eb46c45f896731c66d504334..030f8e3c446fd9bd02aa1cc604803c651bc9207f 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/UserEndpointUnitTest.java
@@ -67,7 +67,7 @@ public class UserEndpointUnitTest extends BaseUnitTest {
     @WithAnonymousUser
     public void create_anonymous_succeeds() throws UserNotFoundException, UserEmailAlreadyExistsException,
             RealmNotFoundException, UserAlreadyExistsException, KeycloakRemoteException,
-            at.tuwien.exception.AccessDeniedException, BrokerRemoteException {
+            at.tuwien.exception.AccessDeniedException, BrokerRemoteException, BrokerVirtualHostCreationException {
         final SignupRequestDto request = SignupRequestDto.builder()
                 .email(USER_1_EMAIL)
                 .username(USER_1_USERNAME)
@@ -304,7 +304,7 @@ public class UserEndpointUnitTest extends BaseUnitTest {
 
     protected void create_generic(SignupRequestDto data, User user) throws UserEmailAlreadyExistsException,
             RealmNotFoundException, UserAlreadyExistsException, UserNotFoundException, KeycloakRemoteException,
-            AccessDeniedException, BrokerRemoteException {
+            AccessDeniedException, BrokerRemoteException, BrokerVirtualHostCreationException {
 
         /* mock */
         when(userService.create(data))
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java
index bfa22db2fb4cdbc2e42ed45e28fbc49898a2fe8f..567e9cbbc7d3fb9b1b4f953d8f57352cad636e9b 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java
@@ -107,7 +107,7 @@ public class BrokerServiceGatewayTest extends BaseUnitTest {
     }
 
     @Test
-    public void grantPermission_virtualHostNoRightsBefore_succeeds() throws BrokerRemoteException {
+    public void grantPermission_virtualHostNoRightsBefore_succeeds() throws BrokerRemoteException, BrokerVirtualHostGrantException {
         final ResponseEntity<Void> mock = ResponseEntity.status(HttpStatus.CREATED)
                 .build();
 
@@ -120,7 +120,7 @@ public class BrokerServiceGatewayTest extends BaseUnitTest {
     }
 
     @Test
-    public void grantPermission_virtualHostRightsSame_succeeds() throws BrokerRemoteException {
+    public void grantPermission_virtualHostRightsSame_succeeds() throws BrokerRemoteException, BrokerVirtualHostGrantException {
         final ResponseEntity<Void> mock = ResponseEntity.status(HttpStatus.NO_CONTENT)
                 .build();
 
@@ -148,7 +148,7 @@ public class BrokerServiceGatewayTest extends BaseUnitTest {
     }
 
     @Test
-    public void createUser_succeeds() throws BrokerRemoteException {
+    public void createUser_succeeds() throws BrokerRemoteException, BrokerVirtualHostCreationException {
         final ResponseEntity<Void> mock = ResponseEntity.status(HttpStatus.NO_CONTENT)
                 .build();
 
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
index 426f086caa7b394f7171d3c6fd8b48629883b6de..20aadf3a08e66db1846bd8bf37357b0fd0a3de93 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
@@ -117,7 +117,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
         when(databaseIdxRepository.save(any(DatabaseDto.class)))
                 .thenReturn(DATABASE_1_DTO);
         when(queryConfig.getGrantPrivileges())
-                .thenCallRealMethod();
+                .thenReturn("SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE");
 
         /* test */
         generic_create(DATABASE_1_CREATE, DATABASE_1);
@@ -133,7 +133,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
         when(databaseIdxRepository.save(any(DatabaseDto.class)))
                 .thenReturn(DATABASE_1_DTO);
         when(queryConfig.getGrantPrivileges())
-                .thenCallRealMethod();
+                .thenReturn("SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE");
 
         /* test */
         generic_create(DATABASE_1_CREATE, DATABASE_1);
@@ -151,7 +151,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
                 .thenReturn(DATABASE_2_DTO)
                 .thenReturn(DATABASE_3_DTO);
         when(queryConfig.getGrantPrivileges())
-                .thenCallRealMethod();
+                .thenReturn("SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE");
 
         /* test */
         generic_create(DATABASE_2_CREATE, DATABASE_2);
@@ -169,7 +169,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
                 .thenReturn(DATABASE_3_DTO)
                 .thenReturn(DATABASE_2_DTO);
         when(queryConfig.getGrantPrivileges())
-                .thenCallRealMethod();
+                .thenReturn("SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE");
 
         /* test */
         generic_create(DATABASE_3_CREATE, DATABASE_3);
@@ -185,7 +185,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
         when(databaseIdxRepository.save(any(DatabaseDto.class)))
                 .thenReturn(DATABASE_1_DTO);
         when(queryConfig.getGrantPrivileges())
-                .thenCallRealMethod();
+                .thenReturn("SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE");
         final Database database = generic_create(DATABASE_1_CREATE, DATABASE_1);
 
 
@@ -202,7 +202,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
         when(databaseIdxRepository.save(any(DatabaseDto.class)))
                 .thenReturn(DATABASE_1_DTO);
         when(queryConfig.getGrantPrivileges())
-                .thenReturn("" /* (1) */, "ALL"/* (2) */);
+                .thenReturn("" /* (1) */, "SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE"/* (2) */);
 
         /* test */
         assertThrows(DatabaseMalformedException.class, () -> {
@@ -220,7 +220,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
         when(databaseIdxRepository.save(any(DatabaseDto.class)))
                 .thenReturn(DATABASE_1_DTO);
         when(queryConfig.getGrantPrivileges())
-                .thenCallRealMethod();
+                .thenReturn("SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE");
 
         /* test */
         assertThrows(SQLInvalidAuthorizationSpecException.class, () -> {
@@ -239,7 +239,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
 
         /* mock */
         when(queryConfig.getGrantPrivileges())
-                .thenCallRealMethod();
+                .thenReturn("SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE");
 
         /* test */
         generic_insert(QUERY_4_STATEMENT, 1L);
@@ -250,7 +250,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
 
         /* mock */
         when(queryConfig.getGrantPrivileges())
-                .thenCallRealMethod();
+                .thenReturn("SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE");
 
         /* test */
         generic_insert(QUERY_4_STATEMENT, 1L);
@@ -263,7 +263,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
 
         /* mock */
         when(queryConfig.getGrantPrivileges())
-                .thenCallRealMethod();
+                .thenReturn("SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE");
 
         /* test */
         generic_system_insert(CONTAINER_1_PRIVILEGED_USERNAME, CONTAINER_1_PRIVILEGED_PASSWORD);
@@ -274,7 +274,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
 
         /* mock */
         when(queryConfig.getGrantPrivileges())
-                .thenCallRealMethod();
+                .thenReturn("SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE");
 
         /* test */
         assertThrows(SQLException.class, () -> {
@@ -287,7 +287,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
 
         /* mock */
         when(queryConfig.getGrantPrivileges())
-                .thenCallRealMethod();
+                .thenReturn("SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE");
 
         /* test */
         generic_user_insert(CONTAINER_1_PRIVILEGED_USERNAME, CONTAINER_1_PRIVILEGED_PASSWORD);
@@ -302,7 +302,7 @@ public class DatabaseServiceIntegrationTest extends BaseUnitTest {
         mariaDbConfig.grantUserPermissions(CONTAINER_1, DATABASE_3, "junit1");
         databaseAccessRepository.save(DATABASE_3_USER_1_WRITE_ALL_ACCESS);
         when(queryConfig.getGrantPrivileges())
-                .thenCallRealMethod();
+                .thenReturn("SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE");
 
         /* test */
         generic_user_insert("junit1", "junit1");
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
index a2059e3539defdbed471eea16cf665b3054690bc..7c0c8c5b5cafa57a37a87ffa2b498dbeb6093bf5 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
@@ -86,14 +86,14 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest {
     }
 
     @Test
-    public void createUser_succeeds() throws BrokerRemoteException {
+    public void createUser_succeeds() throws BrokerRemoteException, BrokerVirtualHostCreationException {
 
         /* test */
         messageQueueService.createUser(USER_1_USERNAME);
     }
 
     @Test
-    public void updatePermissions_empty_succeeds() throws BrokerRemoteException {
+    public void updatePermissions_empty_succeeds() throws BrokerRemoteException, BrokerVirtualHostGrantException {
 
         /* test */
         final PermissionDto permissions = updatePermissions_generic();
@@ -105,7 +105,7 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest {
     }
 
     @Test
-    public void updatePermissions_owner_succeeds() throws BrokerRemoteException {
+    public void updatePermissions_owner_succeeds() throws BrokerRemoteException, BrokerVirtualHostGrantException {
 
         /* mock */
         when(databaseRepository.findConfigureAccess(USER_1_ID))
@@ -125,7 +125,7 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest {
     }
 
     @Test
-    public void updatePermissions_ownerNoAccess_succeeds() throws BrokerRemoteException {
+    public void updatePermissions_ownerNoAccess_succeeds() throws BrokerRemoteException, BrokerVirtualHostGrantException {
 
         /* mock */
         when(databaseRepository.findConfigureAccess(USER_1_ID))
@@ -164,7 +164,7 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest {
     /* ## GENERIC TEST CASES                                                                            ## */
     /* ################################################################################################### */
 
-    protected PermissionDto updatePermissions_generic() throws BrokerRemoteException {
+    protected PermissionDto updatePermissions_generic() throws BrokerRemoteException, BrokerVirtualHostGrantException {
 
         /* mock */
         amqpUtils.createUser(USER_1_USERNAME, USER_1_RABBITMQ_CREATE_DTO);
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java
index e1d3f15b8b872fbca4ee2564a8653ad12a76601f..0484e1c29a30970f2a003b485c33a34ece164bb5 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/BrokerServiceGateway.java
@@ -43,16 +43,18 @@ public interface BrokerServiceGateway {
      * Create user on the broker service
      *
      * @param username The new username.
-     * @throws BrokerRemoteException The Broker Service did not respond within the 3s timeout.
+     * @throws BrokerRemoteException              The Broker Service did not respond within the 3s timeout.
+     * @throws BrokerVirtualHostCreationException The user could not be created.
      */
-    void createUser(String username) throws BrokerRemoteException;
+    void createUser(String username) throws BrokerRemoteException, BrokerVirtualHostCreationException;
 
     /**
      * Grants a user permission at a virtual host in the queue service.
      *
      * @param username The username of the user.
      * @param data     The grant data.
-     * @throws BrokerRemoteException The Broker Service did not respond within the 3s timeout.
+     * @throws BrokerRemoteException           The Broker Service did not respond within the 3s timeout.
+     * @throws BrokerVirtualHostGrantException The permissions could not be granted.
      */
-    void grantPermission(String username, GrantVirtualHostPermissionsDto data) throws BrokerRemoteException;
+    void grantPermission(String username, GrantVirtualHostPermissionsDto data) throws BrokerRemoteException, BrokerVirtualHostGrantException;
 }
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java
index 1e44ecec628e86676d2d4b546f848c7188fb38c3..23ab2985a1db6482a7c37fa1f07431d0ca13fa52 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/gateway/impl/BrokerServiceGatewayImpl.java
@@ -85,7 +85,7 @@ public class BrokerServiceGatewayImpl implements BrokerServiceGateway {
     }
 
     @Override
-    public void createUser(String username) throws BrokerRemoteException {
+    public void createUser(String username) throws BrokerRemoteException, BrokerVirtualHostCreationException {
         final CreateUserDto data = CreateUserDto.builder()
                 .passwordHash("")
                 .tags("")
@@ -101,13 +101,14 @@ public class BrokerServiceGatewayImpl implements BrokerServiceGateway {
         }
         if (!response.getStatusCode().equals(HttpStatus.CREATED) && !response.getStatusCode().equals(HttpStatus.NO_CONTENT)) {
             log.error("Failed to create user: {}", response.getStatusCode());
-            throw new BrokerRemoteException("Failed to create user");
+            throw new BrokerVirtualHostCreationException("Failed to create user");
         }
         log.info("Created user with username {}", username);
     }
 
     @Override
-    public void grantPermission(String username, GrantVirtualHostPermissionsDto data) throws BrokerRemoteException {
+    public void grantPermission(String username, GrantVirtualHostPermissionsDto data) throws BrokerRemoteException,
+            BrokerVirtualHostGrantException {
         final String url = "/api/permissions/dbrepo/" + username;
         log.trace("PUT {}{}", gatewayConfig.getBrokerEndpoint(), url);
         final ResponseEntity<Void> response;
@@ -119,7 +120,7 @@ public class BrokerServiceGatewayImpl implements BrokerServiceGateway {
         }
         if (!response.getStatusCode().equals(HttpStatus.CREATED) && !response.getStatusCode().equals(HttpStatus.NO_CONTENT)) {
             log.error("Failed to grant virtual host: {}", response.getStatusCode());
-            throw new BrokerRemoteException("Failed to grant virtual host");
+            throw new BrokerVirtualHostGrantException("Failed to grant virtual host");
         }
         log.info("Grant permission for user with username {}", username);
     }
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MessageQueueService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MessageQueueService.java
index 63d5bd064a168343586aae5be63bf052572d62bf..50fe5233773cff80774be54bb3c09f7ceb68ef74 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MessageQueueService.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/MessageQueueService.java
@@ -49,7 +49,7 @@ public interface MessageQueueService {
      * @param username The username.
      * @throws BrokerRemoteException The user could not be created.
      */
-    void createUser(String username) throws BrokerRemoteException;
+    void createUser(String username) throws BrokerRemoteException, BrokerVirtualHostCreationException;
 
 
     /**
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java
index 320c321614c4fc8d152ec8263d2eecb5ef32bd38..56c102131aa3a79b72f8b9c18f9f233902bac584 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java
@@ -10,6 +10,7 @@ import at.tuwien.entities.user.User;
 import at.tuwien.exception.AmqpException;
 import at.tuwien.exception.BrokerRemoteException;
 import at.tuwien.exception.BrokerVirtualHostCreationException;
+import at.tuwien.exception.BrokerVirtualHostGrantException;
 import at.tuwien.gateway.BrokerServiceGateway;
 import at.tuwien.mapper.AmqpMapper;
 import at.tuwien.repository.mdb.DatabaseRepository;
@@ -103,12 +104,12 @@ public class RabbitMqServiceImpl implements MessageQueueService {
     }
 
     @Override
-    public void createUser(String username) throws BrokerRemoteException {
+    public void createUser(String username) throws BrokerRemoteException, BrokerVirtualHostCreationException {
         brokerServiceGateway.createUser(username);
     }
 
     @Override
-    public void updatePermissions(User user) throws BrokerRemoteException {
+    public void updatePermissions(User user) throws BrokerRemoteException, BrokerVirtualHostGrantException {
         final GrantVirtualHostPermissionsDto permissions = GrantVirtualHostPermissionsDto.builder()
                 .configure(amqpMapper.databaseListToPermissionString(databaseRepository.findConfigureAccess(user.getId())))
                 .write(amqpMapper.databaseListToPermissionString(databaseRepository.findWriteAccess(user.getId())))