diff --git a/fda-authentication-service/Dockerfile b/fda-authentication-service/Dockerfile
index 42dece92fa455e366583286303ed1a3349b68b54..3011726fb1b2c5e4045a1c20466b63f9a274ef6c 100644
--- a/fda-authentication-service/Dockerfile
+++ b/fda-authentication-service/Dockerfile
@@ -22,8 +22,8 @@ RUN mvn -q clean package -DskipTests
 FROM openjdk:11-jre-slim as runtime
 
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
 ENV WEBSITE=http://example.com
diff --git a/fda-authentication-service/pom.xml b/fda-authentication-service/pom.xml
index 2d96e04186a08e8093c1aa7b48ae432cdbdd898c..4fd2e72422157d3d1640a9b256c358348b23df71 100644
--- a/fda-authentication-service/pom.xml
+++ b/fda-authentication-service/pom.xml
@@ -117,6 +117,11 @@
             <artifactId>h2</artifactId>
             <scope>runtime</scope>
         </dependency>
+        <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+            <version>${mariadb.version}</version>
+        </dependency>
         <!-- IDE -->
         <dependency>
             <groupId>org.projectlombok</groupId>
diff --git a/fda-container-service/Dockerfile b/fda-container-service/Dockerfile
index 3bea5887a324f63858bde43bceb1b4c7b48e7627..9fbaa3dc9496448b608a0ee33365db44b48a4166 100644
--- a/fda-container-service/Dockerfile
+++ b/fda-container-service/Dockerfile
@@ -22,8 +22,8 @@ RUN mvn -q clean package -DskipTests > /dev/null
 FROM openjdk:11-jre-slim as runtime
 
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
 ENV SHARED_FILESYSTEM=/tmp
diff --git a/fda-database-service/Dockerfile b/fda-database-service/Dockerfile
index a6f4b9a8f9d5a0576502feb69b024c0812a574f7..4da92d5f6aae387e690c8c86bae3dda253814a03 100644
--- a/fda-database-service/Dockerfile
+++ b/fda-database-service/Dockerfile
@@ -22,8 +22,8 @@ RUN mvn -q clean package -DskipTests > /dev/null
 FROM openjdk:11-jre-slim as runtime
 
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
 ENV SEARCH_ENDPOINT=search-service
diff --git a/fda-identifier-service/Dockerfile b/fda-identifier-service/Dockerfile
index 3db7b8b6f7ed57059a2f478185cb9526ce100a78..7a05fc285615d14a0a9c22c569adee933d88524e 100644
--- a/fda-identifier-service/Dockerfile
+++ b/fda-identifier-service/Dockerfile
@@ -23,8 +23,8 @@ RUN mvn -q clean package -DskipTests > /dev/null
 FROM openjdk:11-jre-slim as runtime
 
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV GATEWAY_ENDPOINT=http://gateway-service:9095
 ENV WEBSITE=http://localhost:3000
 ENV LOG_LEVEL=debug
diff --git a/fda-metadata-db/Dockerfile b/fda-metadata-db/Dockerfile
index 5cb120f95a3cc37d159c60117ec3bb3b2dfbbb77..bc6ee915761b20048b822f17b96ae98c56301a26 100644
--- a/fda-metadata-db/Dockerfile
+++ b/fda-metadata-db/Dockerfile
@@ -18,14 +18,20 @@ RUN mvn -q clean package -DskipTests > /dev/null
 RUN mvn -q clean install > /dev/null
 
 ###### SECOND STAGE ######
-FROM postgres:14-alpine as runtime
+FROM mariadb:10.5 as runtime
 
+ENV METADATA_DB=fda
 ENV METADATA_USERNAME=dbrepo
 ENV METADATA_PASSWORD=dbrepo
+ENV MARIADB_DATABASE="${METADATA_DB}"
+ENV MARIADB_ROOT_PASSWORD="${METADATA_PASSWORD}"
+ENV MARIADB_USERNAME="${METADATA_USERNAME}"
+ENV MARIADB_PASSWORD="${METADATA_PASSWORD}"
 
 # Scripts are copied to /docker-entrypoint-initdb.d/ in docker-compose from analyze service
-HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD pg_isready
+HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD mysqladmin ping --user="$METADATA_USERNAME" --password="$METADATA_PASSWORD" --silent
 
-COPY ./setup-schema.sql /docker-entrypoint-initdb.d/
+COPY ./setup-schema.sql /docker-entrypoint-initdb.d/1.sql
+COPY ./setup-user.sh /docker-entrypoint-initdb.d/2.sh
 
 COPY --from=build /root/.m2/repository/at/tuwien /root/.m2/repository/at/tuwien
\ No newline at end of file
diff --git a/fda-metadata-db/setup-schema.sql b/fda-metadata-db/setup-schema.sql
index 1e18e92dc340b79a317bcbbf461543486ab6a146..fd2dd014a26803981b6dcc12f3bc7e51dcf84bf9 100644
--- a/fda-metadata-db/setup-schema.sql
+++ b/fda-metadata-db/setup-schema.sql
@@ -126,6 +126,13 @@ CREATE SEQUENCE mdb_tokens_seq
     NO MAXVALUE
     CACHE 1;
 
+CREATE SEQUENCE mdb_concepts_seq
+    START WITH 1
+    INCREMENT BY 1
+    NO MINVALUE
+    NO MAXVALUE
+    CACHE 1;
+
 CREATE TABLE IF NOT EXISTS mdb_users
 (
     UserID               bigint       not null DEFAULT nextval(mdb_user_seq),
@@ -306,7 +313,7 @@ CREATE TABLE IF NOT EXISTS mdb_tables
     tDescription  TEXT,
     NumCols       INTEGER,
     NumRows       INTEGER,
-    separator     CHAR(1),
+    `separator`   CHAR(1),
     quote         CHAR(1),
     element_null  VARCHAR(50),
     skip_lines    BIGINT,
@@ -404,21 +411,22 @@ CREATE TABLE IF NOT EXISTS mdb_COLUMNS_cat
 
 CREATE TABLE IF NOT EXISTS mdb_concepts
 (
+    id         bigint    not null default nextval(mdb_concepts_seq),
     URI        TEXT,
     name       TEXT,
     created    timestamp NOT NULL DEFAULT NOW(),
     created_by bigint,
     FOREIGN KEY (created_by) REFERENCES mdb_users (UserID),
-    PRIMARY KEY (URI)
+    PRIMARY KEY (id)
 );
 
 CREATE TABLE IF NOT EXISTS mdb_columns_concepts
 (
-    cDBID   bigint    NOT NULL,
-    tID     bigint    NOT NULL,
-    cID     bigint    NOT NULL,
-    URI     TEXT REFERENCES mdb_concepts (URI),
-    created timestamp NOT NULL DEFAULT NOW(),
+    cDBID      bigint    NOT NULL,
+    tID        bigint    NOT NULL,
+    cID        bigint    NOT NULL,
+    concept_id bigint REFERENCES mdb_concepts (id), /* mysql does not allow text primary keys */
+    created    timestamp NOT NULL DEFAULT NOW(),
     FOREIGN KEY (cDBID, tID, cID) REFERENCES mdb_COLUMNS (cDBID, tID, ID),
     PRIMARY KEY (cDBID, tID, cID)
 );
@@ -509,21 +517,12 @@ CREATE TABLE IF NOT EXISTS mdb_creators
     FOREIGN KEY (pid) REFERENCES mdb_identifiers (id)
 );
 
-CREATE TABLE IF NOT EXISTS mdb_views_databases
-(
-    mdb_view_id  bigint,
-    databases_id bigint REFERENCES mdb_databases (id),
-    created      timestamp NOT NULL DEFAULT NOW(),
-    FOREIGN KEY (mdb_view_id, databases_id) REFERENCES mdb_VIEW (id, vdbid),
-    PRIMARY KEY (mdb_view_id, databases_id)
-);
-
 CREATE TABLE IF NOT EXISTS mdb_feed
 (
     fDBID   bigint,
     fID     bigint,
-    fUserId INTEGER REFERENCES mdb_users (UserID),
-    fDataID INTEGER REFERENCES mdb_data (ID),
+    fUserId bigint REFERENCES mdb_users (UserID),
+    fDataID bigint REFERENCES mdb_data (ID),
     created timestamp NOT NULL DEFAULT NOW(),
     FOREIGN KEY (fDBID, fID) REFERENCES mdb_tables (tDBID, ID),
     PRIMARY KEY (fDBID, fID, fUserId, fDataID)
@@ -531,7 +530,7 @@ CREATE TABLE IF NOT EXISTS mdb_feed
 
 CREATE TABLE IF NOT EXISTS mdb_update
 (
-    uUserID INTEGER REFERENCES mdb_users (UserID),
+    uUserID bigint REFERENCES mdb_users (UserID),
     uDBID   bigint REFERENCES mdb_databases (id),
     created timestamp NOT NULL DEFAULT NOW(),
     PRIMARY KEY (uUserID, uDBID)
@@ -539,7 +538,7 @@ CREATE TABLE IF NOT EXISTS mdb_update
 
 CREATE TABLE IF NOT EXISTS mdb_access
 (
-    aUserID  INTEGER REFERENCES mdb_users (UserID),
+    aUserID  bigint REFERENCES mdb_users (UserID),
     aDBID    bigint REFERENCES mdb_databases (id),
     attime   TIMESTAMP,
     download BOOLEAN,
@@ -551,14 +550,14 @@ CREATE TABLE IF NOT EXISTS mdb_have_access
 (
     hUserID bigint REFERENCES mdb_users (UserID),
     hDBID   bigint REFERENCES mdb_databases (id),
-    hType ENUM('R', 'W'),
+    hType   ENUM ('R', 'W'),
     created timestamp NOT NULL DEFAULT NOW(),
     PRIMARY KEY (hUserID, hDBID)
 );
 
 CREATE TABLE IF NOT EXISTS mdb_owns
 (
-    oUserID INTEGER REFERENCES mdb_users (UserID),
+    oUserID bigint REFERENCES mdb_users (UserID),
     oDBID   bigint REFERENCES mdb_databases (ID),
     created timestamp NOT NULL DEFAULT NOW(),
     PRIMARY KEY (oUserID, oDBID)
diff --git a/fda-metadata-db/setup-user.sh b/fda-metadata-db/setup-user.sh
new file mode 100644
index 0000000000000000000000000000000000000000..63c5e77afe03d5b111a836b3a3b3e71922c3e40c
--- /dev/null
+++ b/fda-metadata-db/setup-user.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+mysql --user="root" --password="${METADATA_PASSWORD}" --database="${METADATA_DB}" << EOF
+CREATE USER '${MARIADB_USERNAME}' IDENTIFIED BY '${MARIADB_PASSWORD}';
+GRANT ALL PRIVILEGES ON '${METADATA_DB}' TO '${MARIADB_USERNAME}';
+EOF
\ No newline at end of file
diff --git a/fda-metadata-service/Dockerfile b/fda-metadata-service/Dockerfile
index a727f81379c3113dbca4ab6d5dc2662547d2bc71..9b486066e95f7daae4cf970f88624c789947f4dd 100644
--- a/fda-metadata-service/Dockerfile
+++ b/fda-metadata-service/Dockerfile
@@ -22,8 +22,8 @@ RUN mvn -q clean package -DskipTests > /dev/null
 FROM openjdk:11-jre-slim as runtime
 
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV GATEWAY_ENDPOINT=http://gateway-service:9095
 ENV PID_BASE="https://example.com/pid/"
 ENV REPOSITORY_NAME="Example Repository"
diff --git a/fda-metadata-service/pom.xml b/fda-metadata-service/pom.xml
index d54686f8c38ae7683d122b0656e1a89239c87c04..43a00dab90ca052c94062fe71ed3f4889475a462 100644
--- a/fda-metadata-service/pom.xml
+++ b/fda-metadata-service/pom.xml
@@ -60,6 +60,12 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
+        <!-- Datasource -->
+        <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
+            <version>${mariadb.version}</version>
+        </dependency>
         <!-- Monitoring -->
         <dependency>
             <groupId>io.micrometer</groupId>
diff --git a/fda-query-service/Dockerfile b/fda-query-service/Dockerfile
index b2dac0fa1813fdca86d8cf4ee3e9bcf86008fb80..dab9e245a7b1a092da384e89894bd5597c8fc869 100644
--- a/fda-query-service/Dockerfile
+++ b/fda-query-service/Dockerfile
@@ -23,8 +23,8 @@ RUN mvn -q clean package -DskipTests > /dev/null
 FROM openjdk:11-jre-slim as runtime
 
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
 ENV GATEWAY_ENDPOINT=http://gateway-service:9095
diff --git a/fda-table-service/Dockerfile b/fda-table-service/Dockerfile
index e0849c308f65985f0200a36e9151fd8735242ee5..837ca53a56b118039e289c77627bb89382af32e0 100644
--- a/fda-table-service/Dockerfile
+++ b/fda-table-service/Dockerfile
@@ -24,8 +24,8 @@ FROM openjdk:11-jre-slim as runtime
 
 ENV multipart.location=/tmp
 ENV METADATA_DB=fda
-ENV METADATA_USERNAME=postgres
-ENV METADATA_PASSWORD=postgres
+ENV METADATA_USERNAME=dbrepo
+ENV METADATA_PASSWORD=dbrepo
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
 ENV SEARCH_ENDPOINT=search-service