diff --git a/.env.unix.example b/.env.unix.example
index 5a9779d9ae762e517d44e52d969aadab9c485f93..dcb45d886a4f4c90de85959a7874b54201c2eb80 100644
--- a/.env.unix.example
+++ b/.env.unix.example
@@ -9,6 +9,9 @@ SEARCH_PASSWORD=admin
 METADATA_DB=fda
 METADATA_USERNAME=root
 METADATA_PASSWORD=dbrepo
+AUTH_DB=keycloak
+AUTH_USERNAME=root
+AUTH_PASSWORD=dbrepo
 BROKER_ENDPOINT=http://broker-service:15672
 BROKER_USERNAME=fda
 BROKER_PASSWORD=fda
diff --git a/dbrepo-authentication-service/Dockerfile b/dbrepo-authentication-service/Dockerfile
index 354ec042ef658b362942ae7d57579c41c44dafe4..12cc75bde91d0b0c2a9652be3052debe1c18b9c6 100644
--- a/dbrepo-authentication-service/Dockerfile
+++ b/dbrepo-authentication-service/Dockerfile
@@ -36,13 +36,14 @@ WORKDIR /app
 
 COPY ./healthcheck.sh ./healthcheck.sh
 
-ENV METADATA_USERNAME=root
-ENV METADATA_PASSWORD=dbrepo
+ENV AUTH_DB=keycloak
+ENV AUTH_USERNAME=root
+ENV AUTH_PASSWORD=dbrepo
 
 ENV KC_DB=mariadb
-ENV KC_DB_URL=jdbc:mariadb://metadata-db/fda
-ENV KC_DB_USERNAME=${METADATA_USERNAME}
-ENV KC_DB_PASSWORD=${METADATA_PASSWORD}
+ENV KC_DB_URL=jdbc:mariadb://auth-db/${AUTH_DB}
+ENV KC_DB_USERNAME=${AUTH_USERNAME}
+ENV KC_DB_PASSWORD=${AUTH_PASSWORD}
 ENV KC_HOSTNAME_STRICT_HTTPS=false
 ENV KC_HOSTNAME_PATH=/api/auth
 ENV KC_HOSTNAME_ADMIN_URL=http://localhost/api/auth
diff --git a/dbrepo-metadata-db/setup-schema.sql b/dbrepo-metadata-db/setup-schema.sql
index a63d05b837d0200a53505d7165797020303e78fb..8da039c555a4deeb7a90c1b352633ce85ccd30c6 100644
--- a/dbrepo-metadata-db/setup-schema.sql
+++ b/dbrepo-metadata-db/setup-schema.sql
@@ -1,5 +1,21 @@
 BEGIN;
 
+CREATE TABLE IF NOT EXISTS `fda`.`mdb_users`
+(
+    id               character varying(36)  NOT NULL,
+    username         character varying(255) NOT NULL,
+    firstname        character varying(255),
+    lastname         character varying(255),
+    email            character varying(255) NOT NULL,
+    orcid            character varying(255),
+    affiliation      character varying(255),
+    mariadb_password character varying(255) NOT NULL,
+    theme_dark       boolean,
+    PRIMARY KEY (id),
+    UNIQUE (username),
+    UNIQUE (email)
+) WITH SYSTEM VERSIONING;
+
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_images`
 (
     id            bigint                 NOT NULL AUTO_INCREMENT,
@@ -32,13 +48,13 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_images_date`
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_containers`
 (
     id                  bigint                 NOT NULL AUTO_INCREMENT,
-    INTERNAL_NAME       character varying(255) NOT NULL,
-    NAME                character varying(255) NOT NULL,
-    HOST                character varying(255) NOT NULL,
-    PORT                integer                NOT NULL,
+    internal_name       character varying(255) NOT NULL,
+    name                character varying(255) NOT NULL,
+    host                character varying(255) NOT NULL,
+    port                integer                NOT NULL,
     image_id            bigint                 NOT NULL,
     created             timestamp              NOT NULL DEFAULT NOW(),
-    LAST_MODIFIED       timestamp,
+    last_modified       timestamp,
     privileged_username character varying(255) NOT NULL,
     privileged_password character varying(255) NOT NULL,
     PRIMARY KEY (id),
@@ -48,18 +64,18 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_containers`
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_data`
 (
     ID           bigint NOT NULL AUTO_INCREMENT,
-    PROVENANCE   TEXT,
-    FileEncoding TEXT,
-    FileType     VARCHAR(100),
-    Version      TEXT,
-    Seperator    TEXT,
+    PROVENANCE   text,
+    FileEncoding text,
+    FileType     character varying(100),
+    Version      text,
+    Seperator    text,
     PRIMARY KEY (ID)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_licenses`
 (
     identifier character varying(255) NOT NULL,
-    uri        TEXT                   NOT NULL,
+    uri        text                   NOT NULL,
     PRIMARY KEY (identifier),
     UNIQUE (uri)
 ) WITH SYSTEM VERSIONING;
@@ -71,16 +87,19 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_databases`
     name           character varying(255) NOT NULL,
     internal_name  character varying(255) NOT NULL,
     exchange_name  character varying(255) NOT NULL,
-    description    TEXT,
+    description    text,
     engine         character varying(20),
-    is_public      BOOLEAN                NOT NULL DEFAULT TRUE,
-    created_by     character varying(255),
-    owned_by       character varying(255),
-    contact_person character varying(255),
+    is_public      boolean                NOT NULL DEFAULT TRUE,
+    created_by     character varying(36),
+    owned_by       character varying(36),
+    contact_person character varying(36),
     created        timestamp              NOT NULL DEFAULT NOW(),
     last_modified  timestamp,
     PRIMARY KEY (id),
-    FOREIGN KEY (cid) REFERENCES mdb_containers (id) /* currently we only support one-to-one */
+    FOREIGN KEY (cid) REFERENCES mdb_containers (id) /* currently we only support one-to-one */,
+    FOREIGN KEY (created_by) REFERENCES mdb_users (id),
+    FOREIGN KEY (owned_by) REFERENCES mdb_users (id),
+    FOREIGN KEY (contact_person) REFERENCES mdb_users (id)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_databases_subjects`
@@ -110,11 +129,13 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_tables`
     Version       TEXT,
     created       timestamp              NOT NULL DEFAULT NOW(),
     versioned     boolean                not null default true,
-    created_by    character varying(255) NOT NULL,
-    owned_by      character varying(255) NOT NULL,
+    created_by    character varying(36)  NOT NULL,
+    owned_by      character varying(36)  NOT NULL,
     last_modified timestamp,
     PRIMARY KEY (ID),
-    FOREIGN KEY (tDBID) REFERENCES mdb_databases (id)
+    FOREIGN KEY (tDBID) REFERENCES mdb_databases (id),
+    FOREIGN KEY (created_by) REFERENCES mdb_users (id),
+    FOREIGN KEY (owned_by) REFERENCES mdb_users (id)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_columns`
@@ -159,19 +180,17 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_columns_sets`
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_columns_nom`
 (
-    cDBID         bigint,
     tID           bigint,
     cID           bigint,
     maxlength     INTEGER,
     last_modified timestamp,
     created       timestamp NOT NULL DEFAULT NOW(),
-    FOREIGN KEY (cDBID, tID, cID) REFERENCES mdb_columns (cDBID, tID, ID),
-    PRIMARY KEY (cDBID, tID, cID)
+    FOREIGN KEY (tID, cID) REFERENCES mdb_columns (tID, ID),
+    PRIMARY KEY (tID, cID)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_columns_num`
 (
-    cDBID         bigint,
     tID           bigint,
     cID           bigint,
     SIunit        TEXT,
@@ -183,21 +202,20 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_columns_num`
 --    Histogram     INTEGER[],
     last_modified timestamp,
     created       timestamp NOT NULL DEFAULT NOW(),
-    FOREIGN KEY (cDBID, tID, cID) REFERENCES mdb_columns (cDBID, tID, ID),
-    PRIMARY KEY (cDBID, tID, cID)
+    FOREIGN KEY (tID, cID) REFERENCES mdb_columns (tID, ID),
+    PRIMARY KEY (tID, cID)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_columns_cat`
 (
-    cDBID         bigint,
     tID           bigint,
     cID           bigint,
     num_cat       INTEGER,
 --    cat_array     TEXT[],
     last_modified timestamp,
     created       timestamp NOT NULL DEFAULT NOW(),
-    FOREIGN KEY (cDBID, tID, cID) REFERENCES mdb_columns (cDBID, tID, ID),
-    PRIMARY KEY (cDBID, tID, cID)
+    FOREIGN KEY (tID, cID) REFERENCES mdb_columns (tID, ID),
+    PRIMARY KEY (tID, cID)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_constraints_foreign_key`
@@ -255,26 +273,28 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_constraints_checks`
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_concepts`
 (
-    id          bigint       NOT NULL AUTO_INCREMENT,
-    uri         text         not null,
-    name        VARCHAR(255) null,
-    description TEXT         null,
-    created     timestamp    NOT NULL DEFAULT NOW(),
-    created_by  character varying(255),
+    id          bigint                NOT NULL AUTO_INCREMENT,
+    uri         text                  not null,
+    name        VARCHAR(255)          null,
+    description TEXT                  null,
+    created     timestamp             NOT NULL DEFAULT NOW(),
+    created_by  character varying(36) NOT NULL,
     PRIMARY KEY (id),
-    UNIQUE (uri)
+    UNIQUE (uri),
+    FOREIGN KEY (created_by) REFERENCES mdb_users (id)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_units`
 (
-    id          bigint       NOT NULL AUTO_INCREMENT,
-    uri         text         not null,
-    name        VARCHAR(255) null,
-    description TEXT         null,
-    created     timestamp    NOT NULL DEFAULT NOW(),
-    created_by  character varying(255),
+    id          bigint                NOT NULL AUTO_INCREMENT,
+    uri         text                  not null,
+    name        VARCHAR(255)          null,
+    description TEXT                  null,
+    created     timestamp             NOT NULL DEFAULT NOW(),
+    created_by  character varying(36) NOT NULL,
     PRIMARY KEY (id),
-    UNIQUE (uri)
+    UNIQUE (uri),
+    FOREIGN KEY (created_by) REFERENCES mdb_users (id)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_columns_concepts`
@@ -297,21 +317,22 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_columns_units`
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_view`
 (
-    id            bigint                 NOT NULL AUTO_INCREMENT,
-    vdbid         bigint                 NOT NULL,
-    vName         VARCHAR(255)           NOT NULL,
-    internal_name VARCHAR(255)           NOT NULL,
-    Query         TEXT                   NOT NULL,
-    query_hash    VARCHAR(255)           NOT NULL,
-    Public        BOOLEAN                NOT NULL,
+    id            bigint                NOT NULL AUTO_INCREMENT,
+    vdbid         bigint                NOT NULL,
+    vName         VARCHAR(255)          NOT NULL,
+    internal_name VARCHAR(255)          NOT NULL,
+    Query         TEXT                  NOT NULL,
+    query_hash    VARCHAR(255)          NOT NULL,
+    Public        BOOLEAN               NOT NULL,
     NumCols       INTEGER,
     NumRows       INTEGER,
-    InitialView   BOOLEAN                NOT NULL,
-    created       timestamp              NOT NULL DEFAULT NOW(),
+    InitialView   BOOLEAN               NOT NULL,
+    created       timestamp             NOT NULL DEFAULT NOW(),
     last_modified timestamp,
-    created_by    character varying(255) NOT NULL,
+    created_by    character varying(36) NOT NULL,
     PRIMARY KEY (id),
-    FOREIGN KEY (vdbid) REFERENCES mdb_databases (id)
+    FOREIGN KEY (vdbid) REFERENCES mdb_databases (id),
+    FOREIGN KEY (created_by) REFERENCES mdb_users (id)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_banner_messages`
@@ -328,17 +349,18 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_banner_messages`
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_ontologies`
 (
-    id              bigint                 NOT NULL AUTO_INCREMENT,
-    prefix          VARCHAR(8)             NOT NULL,
-    uri             TEXT                   NOT NULL,
+    id              bigint                NOT NULL AUTO_INCREMENT,
+    prefix          VARCHAR(8)            NOT NULL,
+    uri             TEXT                  NOT NULL,
     uri_pattern     TEXT,
-    sparql_endpoint TEXT                   NULL,
+    sparql_endpoint TEXT                  NULL,
     last_modified   timestamp,
-    created         timestamp              NOT NULL DEFAULT NOW(),
-    created_by      character varying(255) NULL,
+    created         timestamp             NOT NULL DEFAULT NOW(),
+    created_by      character varying(36) NOT NULL,
     UNIQUE (prefix),
     UNIQUE (uri),
-    PRIMARY KEY (id)
+    PRIMARY KEY (id),
+    FOREIGN KEY (created_by) REFERENCES mdb_users (id)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_view_columns`
@@ -373,11 +395,12 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_identifiers`
     result_number     bigint,
     doi               VARCHAR(255),
     created           timestamp                           NOT NULL DEFAULT NOW(),
-    created_by        character varying(255)              NOT NULL,
+    created_by        character varying(36)               NOT NULL,
     last_modified     timestamp,
     PRIMARY KEY (id), /* must be a single id from persistent identifier concept */
     FOREIGN KEY (dbid) REFERENCES mdb_databases (id),
-    UNIQUE (dbid, qid)
+    UNIQUE (dbid, qid),
+    FOREIGN KEY (created_by) REFERENCES mdb_users (id)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_identifier_licenses`
@@ -462,11 +485,12 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_feed`
 (
     fDBID   bigint,
     fID     bigint,
-    fUserId character varying(255) not null,
+    fUserId character varying(36) not null,
     fDataID bigint REFERENCES mdb_data (ID),
-    created timestamp              NOT NULL DEFAULT NOW(),
+    created timestamp             NOT NULL DEFAULT NOW(),
     PRIMARY KEY (fDBID, fID, fUserId, fDataID),
-    FOREIGN KEY (fDBID, fID) REFERENCES mdb_tables (tDBID, ID)
+    FOREIGN KEY (fDBID, fID) REFERENCES mdb_tables (tDBID, ID),
+    FOREIGN KEY (fUserId) REFERENCES mdb_users (id)
 ) WITH SYSTEM VERSIONING;
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_update`
@@ -490,11 +514,12 @@ CREATE TABLE IF NOT EXISTS `fda`.`mdb_access`
 
 CREATE TABLE IF NOT EXISTS `fda`.`mdb_have_access`
 (
-    user_id     character varying(255)                  NOT NULL,
+    user_id     character varying(36)                   NOT NULL,
     database_id bigint REFERENCES mdb_databases (id),
     access_type ENUM ('READ', 'WRITE_OWN', 'WRITE_ALL') NOT NULL,
     created     timestamp                               NOT NULL DEFAULT NOW(),
-    PRIMARY KEY (user_id, database_id)
+    PRIMARY KEY (user_id, database_id),
+    FOREIGN KEY (user_id) REFERENCES mdb_users (id)
 ) WITH SYSTEM VERSIONING;
 
 COMMIT;
diff --git a/dbrepo-metadata-service/Dockerfile b/dbrepo-metadata-service/Dockerfile
index 776b2b5609f87c01a6b8bb53a51815c1053f5563..92c2c42cf14b207792fe7604f3f1f5f93c9b881d 100644
--- a/dbrepo-metadata-service/Dockerfile
+++ b/dbrepo-metadata-service/Dockerfile
@@ -56,7 +56,7 @@ ENV SEARCH_USERNAME=admin
 ENV SHARED_FILESYSTEM=/tmp
 ENV USER_NETWORK=userdb
 ENV WEBSITE="http://localhost"
-ENV KEYCLOAK_HOST="http://authentication-service:8080/api/auth"
+ENV KEYCLOAK_HOST="http://authentication-service:8080"
 ENV KEYCLOAK_ADMIN=fda
 ENV KEYCLOAK_ADMIN_PASSWORD=fda
 
diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserAttributesDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserAttributesDto.java
index 794bdd12e8a47c08deb4ec9bc2c9907c8a75d449..48f9662ef87771f0d770ac82c1d46fc5e03964e8 100644
--- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserAttributesDto.java
+++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserAttributesDto.java
@@ -1,5 +1,6 @@
 package at.tuwien.api.user;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.validation.constraints.NotNull;
@@ -26,7 +27,8 @@ public class UserAttributesDto {
     @Schema(example = "Brown University")
     private String affiliation;
 
-    @JsonProperty("mariadb_password")
+    @JsonIgnore
+    @org.springframework.data.annotation.Transient
     @Schema(example = "*CC67043C7BCFF5EEA5566BD9B1F3C74FD9A5CF5D")
     private String mariadbPassword;
 
diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserBriefDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserBriefDto.java
index 7955cde62208fac5bdac44ae130d9436cbf81d0d..35651f362d48d1107c54411e534baf597771ff77 100644
--- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserBriefDto.java
+++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserBriefDto.java
@@ -41,9 +41,4 @@ public class UserBriefDto {
     @Schema(example = "Carberry")
     private String lastname;
 
-    @JsonProperty("email_verified")
-    @Schema(example = "true")
-    @org.springframework.data.annotation.Transient
-    private Boolean emailVerified;
-
 }
diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java
index 21fa777910d21d3ef71d1ffdd1de90d3c63b7f7f..de30923fd9a250897295f66e38c025cc1146b4b5 100644
--- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java
+++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/user/UserDto.java
@@ -1,6 +1,5 @@
 package at.tuwien.api.user;
 
-import at.tuwien.api.container.ContainerDto;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
@@ -12,7 +11,6 @@ import org.springframework.data.elasticsearch.annotations.Document;
 import org.springframework.data.elasticsearch.annotations.Field;
 import org.springframework.data.elasticsearch.annotations.FieldType;
 
-import java.util.List;
 import java.util.UUID;
 
 @Getter
@@ -42,10 +40,6 @@ public class UserDto {
     @Field(name = "name", type = FieldType.Keyword)
     private String name;
 
-    @Schema(example = "http://orcid.org/0000-0002-1825-0097")
-    @Field(name = "orcid", type = FieldType.Keyword)
-    private String orcid;
-
     @JsonProperty("given_name")
     @Schema(example = "Josiah")
     @Field(name = "firstname", type = FieldType.Keyword)
@@ -59,27 +53,9 @@ public class UserDto {
     @NotNull
     private UserAttributesDto attributes;
 
-    @NotNull
-    @org.springframework.data.annotation.Transient
-    private List<ContainerDto> containers;
-
-    @NotNull
-    @org.springframework.data.annotation.Transient
-    private List<ContainerDto> databases;
-
-    @NotNull
-    @org.springframework.data.annotation.Transient
-    private List<ContainerDto> identifiers;
-
     @NotNull
     @org.springframework.data.annotation.Transient
     @Schema(example = "jcarberry@brown.edu")
     private String email;
 
-    @NotNull
-    @JsonProperty("email_verified")
-    @org.springframework.data.annotation.Transient
-    @Schema(example = "true")
-    private Boolean emailVerified;
-
 }
diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/UserMapper.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/UserMapper.java
index bef71a2bbf4838a944a440e9be3c9e60429ee2d5..e6d9c83b57e292f0d741c4dbbdf147bad36dc95f 100644
--- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/UserMapper.java
+++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/mapper/UserMapper.java
@@ -71,6 +71,12 @@ public interface UserMapper {
     UserBriefDto userDtoToUserBriefDto(UserDto data);
 
     /* keep */
+    @Mappings({
+            @Mapping(target = "attributes.orcid", source = "orcid"),
+            @Mapping(target = "attributes.affiliation", source = "affiliation"),
+            @Mapping(target = "attributes.themeDark", source = "themeDark"),
+            @Mapping(target = "attributes.mariadbPassword", source = "mariadbPassword")
+    })
     UserDto userToUserDto(User data);
 
     default UserDetailsDto tokenIntrospectDtoToUserDetailsDto(TokenIntrospectDto data) {
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
index a151801be3b08456734b6a8eecd351b9649ebf5e..deec706f9a32bbaff91a9409f82eb993f76b6cb2 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
@@ -69,7 +69,7 @@ public class UserServiceImpl implements UserService {
         final User entity = User.builder()
                 .username(data.getUsername())
                 .email(data.getEmail())
-                .themeDark(true)
+                .themeDark(false)
                 .mariadbPassword(getMariaDbPassword(data.getPassword()))
                 .build();
         keycloakGateway.createUser(userMapper.signupRequestDtoToUserCreateDto(data));
diff --git a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java
index 840b7670fbcd2779a11f0e2997c71df65a8fbcd0..c8ee4c13fdb3fccff1703fc24a7e435b6e1ceb29 100644
--- a/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java
+++ b/dbrepo-metadata-service/test/src/main/java/at/tuwien/test/BaseTest.java
@@ -296,7 +296,6 @@ public abstract class BaseTest {
             .email(USER_1_EMAIL)
             .firstname(USER_1_FIRSTNAME)
             .lastname(USER_1_LASTNAME)
-            .emailVerified(USER_1_VERIFIED)
             .attributes(USER_1_ATTRIBUTES_DTO)
             .build();
 
@@ -329,7 +328,6 @@ public abstract class BaseTest {
             .username(USER_1_USERNAME)
             .firstname(USER_1_FIRSTNAME)
             .lastname(USER_1_LASTNAME)
-            .emailVerified(USER_1_VERIFIED)
             .build();
 
     public final static UserDetails USER_1_DETAILS = UserDetailsDto.builder()
@@ -402,7 +400,6 @@ public abstract class BaseTest {
             .email(USER_2_EMAIL)
             .firstname(USER_2_FIRSTNAME)
             .lastname(USER_2_LASTNAME)
-            .emailVerified(USER_2_VERIFIED)
             .build();
 
     public final static UserBriefDto USER_2_BRIEF_DTO = UserBriefDto.builder()
@@ -410,7 +407,6 @@ public abstract class BaseTest {
             .username(USER_2_USERNAME)
             .firstname(USER_2_FIRSTNAME)
             .lastname(USER_2_LASTNAME)
-            .emailVerified(USER_2_VERIFIED)
             .build();
 
     public final static SignupRequestDto USER_2_SIGNUP_REQUEST_DTO = SignupRequestDto.builder()
@@ -487,7 +483,6 @@ public abstract class BaseTest {
             .email(USER_3_EMAIL)
             .firstname(USER_3_FIRSTNAME)
             .lastname(USER_3_LASTNAME)
-            .emailVerified(USER_3_VERIFIED)
             .build();
 
     public final static UserDetails USER_3_DETAILS = UserDetailsDto.builder()
@@ -553,20 +548,16 @@ public abstract class BaseTest {
             .id(USER_4_ID)
             .username(USER_4_USERNAME)
             .email(USER_4_EMAIL)
-            .emailVerified(true)
             .firstname(USER_4_FIRSTNAME)
             .lastname(USER_4_LASTNAME)
-            .emailVerified(USER_4_VERIFIED)
             .attributes(USER_4_ATTRIBUTES_DTO)
             .build();
 
     public final static UserBriefDto USER_4_BRIEF_DTO = UserBriefDto.builder()
             .id(USER_4_ID)
             .username(USER_4_USERNAME)
-            .emailVerified(true)
             .firstname(USER_4_FIRSTNAME)
             .lastname(USER_4_LASTNAME)
-            .emailVerified(USER_4_VERIFIED)
             .build();
 
     public final static UserDetails USER_4_DETAILS = UserDetailsDto.builder()
@@ -601,7 +592,6 @@ public abstract class BaseTest {
             .email(USER_5_EMAIL)
             .firstname(USER_5_FIRSTNAME)
             .lastname(USER_5_LASTNAME)
-            .emailVerified(USER_5_VERIFIED)
             .build();
 
     public final static UserDetails USER_5_DETAILS = UserDetailsDto.builder()
@@ -647,7 +637,6 @@ public abstract class BaseTest {
             .email(USER_6_EMAIL)
             .firstname(USER_6_FIRSTNAME)
             .lastname(USER_6_LASTNAME)
-            .emailVerified(USER_6_VERIFIED)
             .build();
 
     public final static UserDetails USER_6_DETAILS = UserDetailsDto.builder()
diff --git a/dbrepo-search-db/limits.conf b/dbrepo-search-db/limits.conf
new file mode 100644
index 0000000000000000000000000000000000000000..80050ed3983f22e4ce355a5b9b8d2f43c260813f
--- /dev/null
+++ b/dbrepo-search-db/limits.conf
@@ -0,0 +1,3 @@
+# allow user 'opensearch' mlockall
+opensearch soft memlock unlimited
+opensearch hard memlock unlimited
diff --git a/dbrepo-ui/api/user.mapper.js b/dbrepo-ui/api/user.mapper.js
index db9223ef6135c8796c16ba1929b1cb368fe850c9..b58993521e8d435e0977d9ba5093ec9bc39d8b2d 100644
--- a/dbrepo-ui/api/user.mapper.js
+++ b/dbrepo-ui/api/user.mapper.js
@@ -14,9 +14,9 @@ class UserMapper {
   userInfoToUser (data) {
     const obj = Object.assign({}, data)
     obj.attributes = {
-      theme_dark: data.attributes.filter(a => a.name === 'theme_dark')[0].value === 'true',
-      orcid: data.attributes.filter(a => a.name === 'orcid')[0].value,
-      affiliation: data.attributes.filter(a => a.name === 'affiliation')[0].value
+      theme_dark: data.attributes.theme_dark,
+      orcid: data.attributes.orcid,
+      affiliation: data.attributes.affiliation
     }
     return obj
   }
@@ -39,7 +39,7 @@ class UserMapper {
       return null
     }
     if (!('given_name' in user) || !('family_name' in user) || user.given_name === null || user.family_name === null) {
-      return user?.username
+      return user.username
     }
     return user.given_name + ' ' + user.family_name
   }
diff --git a/dbrepo-ui/components/TableList.vue b/dbrepo-ui/components/TableList.vue
index 85f7849d3afe4195e89186e1afdd9bebff6b66d5..44cd4357779e196f8378438db2344a5622c218f6 100644
--- a/dbrepo-ui/components/TableList.vue
+++ b/dbrepo-ui/components/TableList.vue
@@ -100,7 +100,7 @@ export default {
       return formatTimestampUTCLabel(this.tableDetails.created)
     },
     canRead () {
-      if (this.database?.is_public) {
+      if (this.database && this.database.is_public) {
         return true
       }
       if (!this.user || !this.access) {
diff --git a/dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue
index 70229bfeac4cee632a7ec58a94a2af4c90bc9608..f6aefd5c4e0f8fed2c4c2bd9ce3be381036a920a 100644
--- a/dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue
+++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue
@@ -129,7 +129,7 @@ export default {
       return this.$store.state.roles
     },
     canRead () {
-      if (this.database?.is_public) {
+      if (this.database && this.database.is_public) {
         return true
       }
       if (!this.user || !this.access) {
diff --git a/docker-compose.yml b/docker-compose.yml
index 1e3559c677682970de6eb46374ec63949f6c9416..4466879fe8b75292dde440739898508647d3784f 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -7,6 +7,7 @@ version: "3.6"
 volumes:
   metadata-db-data:
   data-db-data:
+  auth-db-data:
   upload-service-data:
   search-db-data:
   broker-service-data:
@@ -37,13 +38,18 @@ services:
     networks:
       core:
     volumes:
-      - metadata-db-data:/var/lib/mysql
+      - metadata-db-data:/bitnami/mariadb
       - ./dbrepo-metadata-db/setup-schema_local.sql:/docker-entrypoint-initdb.d/setup-schema_local.sql
     ports:
       - "3306:3306"
       - "9100:9100"
     env_file:
       - .env
+    healthcheck:
+      test: mysqladmin ping --user="$METADATA_USERNAME" --password="$METADATA_PASSWORD" --silent
+      interval: 10s
+      timeout: 5s
+      retries: 12
     logging:
       driver: json-file
 
@@ -55,7 +61,7 @@ services:
     networks:
       core:
     volumes:
-      - data-db-data:/var/lib/mysql
+      - data-db-data:/bitnami/mariadb
       - "/tmp:/tmp"
     ports:
       - "3307:3306"
@@ -72,6 +78,31 @@ services:
     logging:
       driver: json-file
 
+  dbrepo-auth-db:
+    restart: "no"
+    container_name: dbrepo-auth-db
+    hostname: auth-db
+    image: mariadb:10.5
+    networks:
+      core:
+    volumes:
+      - auth-db-data:/bitnami/mariadb
+    ports:
+      - "3308:3306"
+      - "9102:9100"
+    env_file:
+      - .env
+    environment:
+      - MARIADB_ROOT_PASSWORD=$AUTH_PASSWORD
+      - MARIADB_DATABASE=$AUTH_DB
+    healthcheck:
+      test: mysqladmin ping --user="$AUTH_USERNAME" --password="$AUTH_PASSWORD" --silent
+      interval: 10s
+      timeout: 5s
+      retries: 12
+    logging:
+      driver: json-file
+
   dbrepo-upload-service:
     restart: "no"
     container_name: dbrepo-upload-service
@@ -190,7 +221,7 @@ services:
     env_file:
       - .env
     healthcheck:
-      test: curl -s localhost:9200/_cat/indices | grep -q "user" || exit 1
+      test: curl -s localhost:9200/_cat/indices || exit 1
       interval: 10s
       timeout: 5s
       retries: 12
@@ -199,13 +230,13 @@ services:
       ES_JAVA_OPTS: "-Xms4g -Xmx4g"
       logger.level: "WARN"
       plugins.security.disabled: "true"
-      bootstrap.memory_lock: "true"
     deploy:
       resources:
         limits:
           memory: 4G
     volumes:
       - search-db-data:/usr/share/elasticsearch/data
+      - ./dbrepo-search-db/limits.conf:/etc/security/limits.conf
     logging:
       driver: json-file