diff --git a/dbrepo-analyse-service/Pipfile.lock b/dbrepo-analyse-service/Pipfile.lock
index 99d70b613229b3fcc81638d99d038034b58ef9d6..4defcfdba05c03f477737f6e819f41e8bfbfe056 100644
--- a/dbrepo-analyse-service/Pipfile.lock
+++ b/dbrepo-analyse-service/Pipfile.lock
@@ -175,20 +175,20 @@
         },
         "boto3": {
             "hashes": [
-                "sha256:7d398f66a11e67777c189d1f58c0a75d9d60f98d0ee51b8817e828930bf19e4e",
-                "sha256:8e49416216a6e3a62c2a0c44fba4dd2852c85472e7b702516605b1363867d220"
+                "sha256:4b6274b4fe9d7113f978abea66a1f20c8a397c268c9d1b2a6c96b14a256da4a5",
+                "sha256:d0224e1499d7189b47aa7f469d96522d98df6f5702fccb20a95a436582ebcd9d"
             ],
             "index": "pypi",
             "markers": "python_version >= '3.8'",
-            "version": "==1.35.97"
+            "version": "==1.35.98"
         },
         "botocore": {
             "hashes": [
-                "sha256:88f2fab29192ffe2f2115d5bafbbd823ff4b6eb2774296e03ec8b5b0fe074f61",
-                "sha256:fed4f156b1a9b8ece53738f702ba5851b8c6216b4952de326547f349cc494f14"
+                "sha256:4f1c0b687488663a774ad3a5e81a5f94fae1bcada2364cfdc48482c4dbf794d5",
+                "sha256:d11742b3824bdeac3c89eeeaf5132351af41823bbcef8fc15e95c8250b1de09c"
             ],
             "markers": "python_version >= '3.8'",
-            "version": "==1.35.97"
+            "version": "==1.35.98"
         },
         "certifi": {
             "hashes": [
@@ -412,7 +412,7 @@
         },
         "dbrepo": {
             "hashes": [
-                "sha256:7cddcbdcb3eade84f67db01fa32e0649ecc01d4c3cc5e7542d3c402ad52efc19"
+                "sha256:c7cc16e8cc8d14ee91c843f00ea5d10ecb5bc66b19b372b55558e98257e2d8f4"
             ],
             "path": "./lib/dbrepo-1.6.1.tar.gz"
         },
@@ -1612,7 +1612,7 @@
                 "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df",
                 "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"
             ],
-            "markers": "python_version >= '3.10'",
+            "markers": "python_version >= '3.9'",
             "version": "==2.3.0"
         },
         "werkzeug": {
@@ -2236,7 +2236,7 @@
                 "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df",
                 "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"
             ],
-            "markers": "python_version >= '3.10'",
+            "markers": "python_version >= '3.9'",
             "version": "==2.3.0"
         },
         "wrapt": {
diff --git a/dbrepo-analyse-service/lib/dbrepo-1.6.1.tar.gz b/dbrepo-analyse-service/lib/dbrepo-1.6.1.tar.gz
index a1197ff6465d77567108f3389aae9d54dc9c8ab6..2bd95d66c26e1a1df90f6e6c76175910ea408265 100644
Binary files a/dbrepo-analyse-service/lib/dbrepo-1.6.1.tar.gz and b/dbrepo-analyse-service/lib/dbrepo-1.6.1.tar.gz differ
diff --git a/dbrepo-data-service/rest-service/src/main/resources/application.yml b/dbrepo-data-service/rest-service/src/main/resources/application.yml
index 03d89895cb607cee20bc84cd8cd3195c029a9ab8..b5f592d570cb73677baaa00666af945901e1d256 100644
--- a/dbrepo-data-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-data-service/rest-service/src/main/resources/application.yml
@@ -74,7 +74,7 @@ dbrepo:
     default:
       read: "${GRANT_DEFAULT_READ:SELECT}"
       write: "${GRANT_DEFAULT_WRITE:SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE}"
-  credentialCacheTimeout: "${CREDENTIAL_CACHE_TIMEOUT:3600}"
+  credentialCacheTimeout: "${CREDENTIAL_CACHE_TIMEOUT:60}"
   minConcurrent: "${MIN_CONCURRENT_CONSUMERS:2}"
   maxConcurrent: "${MAX_CONCURRENT_CONSUMERS:6}"
   requeueRejected: ${REQUEUE_REJECTED:false}
diff --git a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java
index aef7ebd7b8e5cfe718814f18c30ea0e5b157e37a..d90a702db33c759a511480fa0e89c37efc2773fc 100644
--- a/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java
+++ b/dbrepo-metadata-service/entities/src/main/java/at/tuwien/entities/database/Database.java
@@ -33,10 +33,11 @@ import static jakarta.persistence.GenerationType.IDENTITY;
 })
 @NamedQueries({
         @NamedQuery(name = "Database.findAllDesc", query = "select distinct d from Database d order by d.id desc"),
-        @NamedQuery(name = "Database.findAllPublicDesc", query = "select distinct d from Database d where d.isPublic = true or d.isSchemaPublic = true order by d.id desc"),
-        @NamedQuery(name = "Database.findAllPublicOrReadAccessDesc", query = "select distinct d from Database d where d.isPublic = true or d.isSchemaPublic = true or exists(select a.hdbid from DatabaseAccess a where a.huserid = ?1 and a.hdbid = d.id) order by d.id desc"),
-        @NamedQuery(name = "Database.findAllPublicOrReadAccessByInternalNameDesc", query = "select distinct d from Database d where (d.isPublic = true or d.isSchemaPublic = true) and d.internalName = ?2 or exists(select a.hdbid from DatabaseAccess a where a.huserid = ?1 and a.hdbid = d.id) order by d.id desc"),
-        @NamedQuery(name = "Database.findAllPublicByInternalNameDesc", query = "select distinct d from Database d where (d.isPublic = true or d.isSchemaPublic = true) and d.internalName = ?1 order by d.id desc"),
+        @NamedQuery(name = "Database.findAllAtLestReadAccessDesc", query = "select distinct d from Database d where exists(select a.hdbid from DatabaseAccess a where a.huserid = ?1 and a.hdbid = d.id) order by d.id desc"),
+        @NamedQuery(name = "Database.findAllPublicOrSchemaPublicDesc", query = "select distinct d from Database d where d.isPublic = true or d.isSchemaPublic = true order by d.id desc"),
+        @NamedQuery(name = "Database.findAllPublicOrSchemaPublicOrReadAccessDesc", query = "select distinct d from Database d where d.isPublic = true or d.isSchemaPublic = true or exists(select a.hdbid from DatabaseAccess a where a.huserid = ?1 and a.hdbid = d.id) order by d.id desc"),
+        @NamedQuery(name = "Database.findAllPublicOrSchemaPublicOrReadAccessByInternalNameDesc", query = "select distinct d from Database d where (d.isPublic = true or d.isSchemaPublic = true) and d.internalName = ?2 or exists(select a.hdbid from DatabaseAccess a where a.huserid = ?1 and a.hdbid = d.id) order by d.id desc"),
+        @NamedQuery(name = "Database.findAllPublicOrSchemaPublicByInternalNameDesc", query = "select distinct d from Database d where (d.isPublic = true or d.isSchemaPublic = true) and d.internalName = ?1 order by d.id desc"),
 })
 public class Database implements Serializable {
 
diff --git a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/DatabaseRepository.java b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/DatabaseRepository.java
index 3c1a79f16e59941c7b4602a0879b725e36329043..38a0a8044162cbf3abe9178de26fca4a21e7ee4c 100644
--- a/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/DatabaseRepository.java
+++ b/dbrepo-metadata-service/repositories/src/main/java/at/tuwien/repository/DatabaseRepository.java
@@ -13,12 +13,14 @@ public interface DatabaseRepository extends JpaRepository<Database, Long> {
 
     List<Database> findAllDesc();
 
-    List<Database> findAllPublicDesc();
+    List<Database> findAllPublicOrSchemaPublicDesc();
 
-    List<Database> findAllPublicOrReadAccessDesc(UUID id);
+    List<Database> findAllAtLestReadAccessDesc(UUID id);
 
-    List<Database> findAllPublicOrReadAccessByInternalNameDesc(UUID id, String internalName);
+    List<Database> findAllPublicOrSchemaPublicOrReadAccessDesc(UUID id);
 
-    List<Database> findAllPublicByInternalNameDesc(String internalName);
+    List<Database> findAllPublicOrSchemaPublicOrReadAccessByInternalNameDesc(UUID id, String internalName);
+
+    List<Database> findAllPublicOrSchemaPublicByInternalNameDesc(String internalName);
 
 }
diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java
index 793cf45a8d6a51cb51018b4affaf63054f96bab3..ad72fb0756f20fac58bc717c0da601f9b5bb1c74 100644
--- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java
+++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java
@@ -82,18 +82,18 @@ public class DatabaseEndpoint extends AbstractEndpoint {
         if (principal != null) {
             if (internalName != null) {
                 log.debug("filter request to contain only public databases or where user with id {} has at least read access that match internal name {}", getId(principal), internalName);
-                databases = databaseService.findAllPublicOrReadAccessByInternalName(getId(principal), internalName);
+                databases = databaseService.findAllPublicOrSchemaPublicOrReadAccessByInternalName(getId(principal), internalName);
             } else {
-                log.debug("filter request to contain only public databases or where user with id {} has at least read access", getId(principal));
-                databases = databaseService.findAllPublicOrReadAccess(getId(principal));
+                log.debug("filter request to contain only databases where user with id {} has at least read access", getId(principal));
+                databases = databaseService.findAllPublicOrSchemaPublicOrReadAccess(getId(principal));
             }
         } else {
             if (internalName != null) {
                 log.debug("filter request to contain only public databases that match internal name {}", internalName);
-                databases = databaseService.findAllPublicByInternalName(internalName);
+                databases = databaseService.findAllPublicOrSchemaPublicByInternalName(internalName);
             } else {
                 log.debug("filter request to contain only public databases");
-                databases = databaseService.findAllPublic();
+                databases = databaseService.findAllPublicOrSchemaPublic();
             }
         }
         final HttpHeaders headers = new HttpHeaders();
@@ -520,11 +520,11 @@ public class DatabaseEndpoint extends AbstractEndpoint {
             /* reduce metadata */
             database.setTables(database.getTables()
                     .stream()
-                    .filter(t -> t.getIsPublic() || optional.isPresent())
+                    .filter(t -> t.getIsPublic() || t.getIsSchemaPublic() || optional.isPresent())
                     .toList());
             database.setViews(database.getViews()
                     .stream()
-                    .filter(v -> v.getIsPublic() || optional.isPresent())
+                    .filter(v -> v.getIsPublic() || v.getIsSchemaPublic() || optional.isPresent())
                     .toList());
             if (!isSystem(principal) && !database.getOwner().getId().equals(getId(principal))) {
                 log.trace("authenticated user {} is not owner: remove access list", principal.getName());
@@ -538,11 +538,11 @@ public class DatabaseEndpoint extends AbstractEndpoint {
             /* reduce metadata */
             database.setTables(database.getTables()
                     .stream()
-                    .filter(Table::getIsPublic)
+                    .filter(t -> t.getIsPublic() || t.getIsSchemaPublic())
                     .toList());
             database.setViews(database.getViews()
                     .stream()
-                    .filter(View::getIsPublic)
+                    .filter(v -> v.getIsPublic() || v.getIsSchemaPublic())
                     .toList());
             database.setAccesses(List.of());
         }
diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java
index 6ed865ca25923bea14c9ed39c3d8b18bacbc7f63..9f4542fc023f8aaf336fc2de196d0c36ab93cea4 100644
--- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java
+++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/endpoints/TableEndpoint.java
@@ -98,7 +98,7 @@ public class TableEndpoint extends AbstractEndpoint {
         endpointValidator.validateOnlyPrivateSchemaHasRole(database, principal, "list-tables");
         return ResponseEntity.ok(database.getTables()
                 .stream()
-                .filter(Table::getIsPublic)
+                .filter(t -> t.getIsPublic() || t.getIsSchemaPublic())
                 .map(metadataMapper::tableToTableBriefDto)
                 .collect(Collectors.toList()));
     }
@@ -484,21 +484,16 @@ public class TableEndpoint extends AbstractEndpoint {
         boolean isOwner = false;
         if (principal != null) {
             isOwner = table.getOwner().getId().equals(getId(principal));
-            if (table.getIsSchemaPublic()) {
+            if (!table.getIsSchemaPublic()) {
                 try {
                     accessService.find(table.getDatabase(), userService.findById(getId(principal)));
                 } catch (UserNotFoundException | AccessNotFoundException e) {
                     if (!isOwner && !isSystem(principal)) {
-                        log.error("Failed to find table with id {}: private and not authorized", table);
-                        throw new NotAllowedException("Failed to find table with id " + tableId + ": private and not authorized");
+                        log.error("Failed to find table with id {}: private and no access permission", table);
+                        throw new NotAllowedException("Failed to find table with id " + tableId + ": private and no access permission");
                     }
                 }
             }
-        } else {
-            if (!table.getIsSchemaPublic()) {
-                log.error("Failed to find table with id {}: private and not authorized", table);
-                throw new NotAllowedException("Failed to find table with id " + tableId + ": private and not authorized");
-            }
         }
         if (!table.getIsSchemaPublic() && !isOwner && !isSystem(principal)) {
             log.debug("remove schema from table: {}.{}", database.getInternalName(), table.getInternalName());
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 b8952b5c56f034511f9040654096e4103c44dbce..5a349ff3782f1c94a4aea6f4d609f3402437b9c0 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
@@ -391,7 +391,7 @@ public class UserEndpoint extends AbstractEndpoint {
             throw new NotAllowedException("Failed to modify user password: not current user");
         }
         authenticationService.updatePassword(user, data);
-        for (Database database : databaseService.findAllPublicOrReadAccess(userId)) {
+        for (Database database : databaseService.findAllAtLestReadAccess(userId)) {
             databaseService.updatePassword(database, user);
         }
         userService.updatePassword(user, data);
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java
index 556a2a958de4878528f2477c65c9e119c63dbde2..11d64faf8b9562ff42ab2120d5f6fa151710d462 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/DatabaseEndpointUnitTest.java
@@ -276,7 +276,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest {
     public void list_anonymous_succeeds() throws DatabaseNotFoundException, UserNotFoundException {
 
         /* mock */
-        when(databaseService.findAllPublic())
+        when(databaseService.findAllPublicOrSchemaPublic())
                 .thenReturn(List.of(DATABASE_1));
 
         /* test */
@@ -291,7 +291,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest {
         assertTrue(DATABASE_3_PUBLIC);
 
         /* mock */
-        when(databaseService.findAllPublicOrReadAccess(any(UUID.class)))
+        when(databaseService.findAllPublicOrSchemaPublicOrReadAccess(any(UUID.class)))
                 .thenReturn(List.of(DATABASE_3));
 
         /* test */
@@ -306,7 +306,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest {
         assertTrue(DATABASE_3_PUBLIC);
 
         /* mock */
-        when(databaseService.findAllPublicOrReadAccess(USER_1_ID))
+        when(databaseService.findAllPublicOrSchemaPublicOrReadAccess(USER_1_ID))
                 .thenReturn(List.of(DATABASE_3));
 
         /* test */
@@ -318,7 +318,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest {
     public void list_hasRoleFilter_succeeds() throws DatabaseNotFoundException, UserNotFoundException {
 
         /* mock */
-        when(databaseService.findAllPublicOrReadAccessByInternalName(USER_1_ID, DATABASE_3_INTERNALNAME))
+        when(databaseService.findAllPublicOrSchemaPublicOrReadAccessByInternalName(USER_1_ID, DATABASE_3_INTERNALNAME))
                 .thenReturn(List.of(DATABASE_3));
 
         /* test */
@@ -330,7 +330,7 @@ public class DatabaseEndpointUnitTest extends AbstractUnitTest {
     public void list_hasRoleFilterNoResult_succeeds() throws DatabaseNotFoundException, UserNotFoundException {
 
         /* mock */
-        when(databaseService.findAllPublicOrReadAccessByInternalName(USER_1_ID, "i_do_not_exist"))
+        when(databaseService.findAllPublicOrSchemaPublicOrReadAccessByInternalName(USER_1_ID, "i_do_not_exist"))
                 .thenReturn(List.of());
 
         /* test */
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 39e305923ff6e7fe51b002c2eccc786e09fcd621..be0ea28c496d9c3bd65df14f8a312af5c9003069 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
@@ -512,7 +512,7 @@ public class UserEndpointUnitTest extends AbstractUnitTest {
         doNothing()
                 .when(userService)
                 .updatePassword(USER_1, data);
-        when(databaseService.findAllPublicOrReadAccess(USER_1_ID))
+        when(databaseService.findAllAtLestReadAccess(USER_1_ID))
                 .thenReturn(List.of(DATABASE_1));
         doNothing()
                 .when(databaseService)
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java
index 9240da4c96f0865711b7a66107597a9fd0d401a4..f323d2837541d7bff7e15d51273bc9e5f6840d58 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServicePersistenceTest.java
@@ -32,9 +32,6 @@ public class DatabaseServicePersistenceTest extends AbstractUnitTest {
     @Autowired
     private DatabaseService databaseService;
 
-    @Autowired
-    private AccessService accessService;
-
     @Autowired
     private UserRepository userRepository;
 
@@ -68,29 +65,29 @@ public class DatabaseServicePersistenceTest extends AbstractUnitTest {
 
     @Test
     @Transactional(readOnly = true)
-    public void findAllPublicByInternalName_succeeds() {
+    public void findAllPublicOrSchemaPublicByInternalName_succeeds() {
 
         /* test */
-        final List<Database> response = databaseService.findAllPublicByInternalName(DATABASE_3_INTERNALNAME);
+        final List<Database> response = databaseService.findAllPublicOrSchemaPublicByInternalName(DATABASE_3_INTERNALNAME);
         assertEquals(1, response.size());
         assertEquals(DATABASE_3, response.get(0));
     }
 
     @Test
     @Transactional(readOnly = true)
-    public void findAllPublicByInternalName_privateEmpty_succeeds() {
+    public void findAllPublicOrSchemaPublicByInternalName_privateEmpty_succeeds() {
 
         /* test */
-        final List<Database> response = databaseService.findAllPublicByInternalName(DATABASE_1_INTERNALNAME);
+        final List<Database> response = databaseService.findAllPublicOrSchemaPublicByInternalName(DATABASE_1_INTERNALNAME);
         assertEquals(0, response.size());
     }
 
     @Test
     @Transactional(readOnly = true)
-    public void findAllPublicOrReadAccess_privateNoAccessEmpty_succeeds() {
+    public void findAllAtLestReadAccess_privateNoAccessEmpty_succeeds() {
 
         /* test */
-        final List<Database> response = databaseService.findAllPublicOrReadAccess(USER_4_ID);
+        final List<Database> response = databaseService.findAllAtLestReadAccess(USER_4_ID);
         assertEquals(3, response.size());
         assertEquals(DATABASE_4, response.get(0));
         assertEquals(DATABASE_3, response.get(1));
@@ -99,10 +96,10 @@ public class DatabaseServicePersistenceTest extends AbstractUnitTest {
 
     @Test
     @Transactional(readOnly = true)
-    public void findAllPublicOrReadAccess_privateAccess_succeeds() {
+    public void findAllAtLestReadAccess_privateAccess_succeeds() {
 
         /* test */
-        final List<Database> response = databaseService.findAllPublicOrReadAccess(USER_2_ID);
+        final List<Database> response = databaseService.findAllAtLestReadAccess(USER_2_ID);
         assertEquals(4, response.size());
         assertEquals(DATABASE_4, response.get(0));
         assertEquals(DATABASE_3, response.get(1));
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java
index 9a80ec1e423ae0e38e45528c73fffe61508ee8e0..1b6570abd821337fe032bead021cf9d5a4b9fc8c 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java
@@ -92,7 +92,7 @@ public class DatabaseServiceUnitTest extends AbstractUnitTest {
             DataServiceConnectionException {
 
         /* mock */
-        when(databaseRepository.findAllPublicOrReadAccessDesc(USER_1_ID))
+        when(databaseRepository.findAllAtLestReadAccessDesc(USER_1_ID))
                 .thenReturn(List.of(DATABASE_1));
         doNothing()
                 .when(dataServiceGateway)
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java
index 93abb7304c323f93742ef09efce1605923230cc8..3000ece11e91cc2b58f2edcfac85f6a0f8a60528 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/DatabaseService.java
@@ -21,9 +21,9 @@ public interface DatabaseService {
      */
     List<Database> findAll();
 
-    List<Database> findAllPublic();
+    List<Database> findAllPublicOrSchemaPublic();
 
-    List<Database> findAllPublicOrReadAccessByInternalName(UUID userId, String internalName);
+    List<Database> findAllPublicOrSchemaPublicOrReadAccessByInternalName(UUID userId, String internalName);
 
     /**
      * Finds all databases stored in the metadata database.
@@ -31,13 +31,21 @@ public interface DatabaseService {
      * @param userId The user id.
      * @return List of databases.
      */
-    List<Database> findAllPublicOrReadAccess(UUID userId);
+    List<Database> findAllAtLestReadAccess(UUID userId);
+
+    /**
+     * Finds all databases stored in the metadata database.
+     *
+     * @param userId The user id.
+     * @return List of databases.
+     */
+    List<Database> findAllPublicOrSchemaPublicOrReadAccess(UUID userId);
 
     /**
      * @param internalName The database internal name.
      * @return The databases if found.
      */
-    List<Database> findAllPublicByInternalName(String internalName);
+    List<Database> findAllPublicOrSchemaPublicByInternalName(String internalName);
 
     /**
      * Find a database by id, only used in the authentication service
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
index 11ba1c03196d09da8f0b3020a90e959a510714b5..7415ded56a8a2a926742ef3b44b025f7fb535baa 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
@@ -59,23 +59,28 @@ public class DatabaseServiceImpl implements DatabaseService {
     }
 
     @Override
-    public List<Database> findAllPublic() {
-        return databaseRepository.findAllPublicDesc();
+    public List<Database> findAllPublicOrSchemaPublic() {
+        return databaseRepository.findAllPublicOrSchemaPublicDesc();
     }
 
     @Override
-    public List<Database> findAllPublicOrReadAccessByInternalName(UUID userId, String internalName) {
-        return databaseRepository.findAllPublicOrReadAccessByInternalNameDesc(userId, internalName);
+    public List<Database> findAllPublicOrSchemaPublicOrReadAccessByInternalName(UUID userId, String internalName) {
+        return databaseRepository.findAllPublicOrSchemaPublicOrReadAccessByInternalNameDesc(userId, internalName);
     }
 
     @Override
-    public List<Database> findAllPublicOrReadAccess(UUID userId) {
-        return databaseRepository.findAllPublicOrReadAccessDesc(userId);
+    public List<Database> findAllAtLestReadAccess(UUID userId) {
+        return databaseRepository.findAllAtLestReadAccessDesc(userId);
     }
 
     @Override
-    public List<Database> findAllPublicByInternalName(String internalName) {
-        return databaseRepository.findAllPublicByInternalNameDesc(internalName);
+    public List<Database> findAllPublicOrSchemaPublicOrReadAccess(UUID userId) {
+        return databaseRepository.findAllPublicOrSchemaPublicOrReadAccessDesc(userId);
+    }
+
+    @Override
+    public List<Database> findAllPublicOrSchemaPublicByInternalName(String internalName) {
+        return databaseRepository.findAllPublicOrSchemaPublicByInternalNameDesc(internalName);
     }
 
     @Override
@@ -141,7 +146,7 @@ public class DatabaseServiceImpl implements DatabaseService {
     @Transactional(readOnly = true)
     public void updatePassword(Database database, User user) throws DataServiceException, DataServiceConnectionException,
             DatabaseNotFoundException {
-        final List<Database> databases = databaseRepository.findAllPublicOrReadAccessDesc(user.getId())
+        final List<Database> databases = databaseRepository.findAllAtLestReadAccessDesc(user.getId())
                 .stream()
                 .distinct()
                 .toList();
diff --git a/dbrepo-search-service/Pipfile.lock b/dbrepo-search-service/Pipfile.lock
index 9a33916adfdf47848c302c03e7110bba5dc8d09c..3e6cfafc458b461ad4fbf3c89de1a8988de652ad 100644
--- a/dbrepo-search-service/Pipfile.lock
+++ b/dbrepo-search-service/Pipfile.lock
@@ -360,7 +360,7 @@
         },
         "dbrepo": {
             "hashes": [
-                "sha256:7cddcbdcb3eade84f67db01fa32e0649ecc01d4c3cc5e7542d3c402ad52efc19"
+                "sha256:c7cc16e8cc8d14ee91c843f00ea5d10ecb5bc66b19b372b55558e98257e2d8f4"
             ],
             "path": "./lib/dbrepo-1.6.1.tar.gz"
         },
diff --git a/dbrepo-search-service/init/Pipfile.lock b/dbrepo-search-service/init/Pipfile.lock
index 93c8b4291603d19deb3fbc79bd23e8d55e8379e4..14a228982b579ff634443be53c08353895786e81 100644
--- a/dbrepo-search-service/init/Pipfile.lock
+++ b/dbrepo-search-service/init/Pipfile.lock
@@ -254,7 +254,7 @@
         },
         "dbrepo": {
             "hashes": [
-                "sha256:7cddcbdcb3eade84f67db01fa32e0649ecc01d4c3cc5e7542d3c402ad52efc19"
+                "sha256:c7cc16e8cc8d14ee91c843f00ea5d10ecb5bc66b19b372b55558e98257e2d8f4"
             ],
             "path": "./lib/dbrepo-1.6.1.tar.gz"
         },
diff --git a/dbrepo-search-service/init/clients/opensearch_client.py b/dbrepo-search-service/init/clients/opensearch_client.py
index 7d25fcded5a29e87524523785133d7aaa56f314d..030a56ffd53b126b15baabab3dd720d7f5e7f73f 100644
--- a/dbrepo-search-service/init/clients/opensearch_client.py
+++ b/dbrepo-search-service/init/clients/opensearch_client.py
@@ -1,17 +1,16 @@
 """
 The opensearch_client.py is used by the different API endpoints in routes.py to handle requests  to the opensearch db
 """
+import logging
 import os
+from collections.abc import MutableMapping
 from json import dumps, load
-import logging
 
 from dbrepo.api.dto import Database
-from collections.abc import MutableMapping
+from opensearchpy import OpenSearch, NotFoundError
 
-from opensearchpy import OpenSearch, TransportError, RequestError, NotFoundError
-
-from omlib.measure import om
 from omlib.constants import OM_IDS
+from omlib.measure import om
 from omlib.omconstants import OM
 from omlib.unit import Unit
 
@@ -54,7 +53,7 @@ class OpenSearchClient:
         @throws: opensearchpy.exceptions.NotFoundError If the database was not found in the Search Database.
         """
         response: dict = self._instance().get(index="database", id=database_id)
-        return Database.parse_obj(response["_source"])
+        return Database.model_validate(response["_source"])
 
     def update_database(self, database_id: int, data: Database) -> Database:
         """
@@ -69,7 +68,7 @@ class OpenSearchClient:
         logging.debug(f"updating database with id: {database_id} in search database")
         self._instance().index(index="database", id=database_id, body=dumps(data.model_dump()))
         response: dict = self._instance().get(index="database", id=database_id)
-        database = Database.parse_obj(response["_source"])
+        database = Database.model_validate(response["_source"])
         logging.info(f"Updated database with id {database_id} in index 'database'")
         return database
 
diff --git a/dbrepo-search-service/init/lib/dbrepo-1.6.1.tar.gz b/dbrepo-search-service/init/lib/dbrepo-1.6.1.tar.gz
index a1197ff6465d77567108f3389aae9d54dc9c8ab6..2bd95d66c26e1a1df90f6e6c76175910ea408265 100644
Binary files a/dbrepo-search-service/init/lib/dbrepo-1.6.1.tar.gz and b/dbrepo-search-service/init/lib/dbrepo-1.6.1.tar.gz differ
diff --git a/dbrepo-search-service/lib/dbrepo-1.6.1.tar.gz b/dbrepo-search-service/lib/dbrepo-1.6.1.tar.gz
index a1197ff6465d77567108f3389aae9d54dc9c8ab6..2bd95d66c26e1a1df90f6e6c76175910ea408265 100644
Binary files a/dbrepo-search-service/lib/dbrepo-1.6.1.tar.gz and b/dbrepo-search-service/lib/dbrepo-1.6.1.tar.gz differ
diff --git a/dbrepo-search-service/test/test_opensearch_client.py b/dbrepo-search-service/test/test_opensearch_client.py
index ab95e29e1e88c0c5c43b5674dc0f252fc29106b7..e37a96db10aaf44c9f588907295a2622c1fc0d38 100644
--- a/dbrepo-search-service/test/test_opensearch_client.py
+++ b/dbrepo-search-service/test/test_opensearch_client.py
@@ -42,9 +42,9 @@ req = Database(id=1,
                                              ord=0,
                                              internal_name="id",
                                              type=ColumnType.BIGINT,
-                                             is_public=True,
                                              is_null_allowed=False,
-                                             size=20, d=0,
+                                             size=20,
+                                             d=0,
                                              concept=ConceptBrief(id=1, uri="http://www.wikidata.org/entity/Q2221906"),
                                              unit=UnitBrief(id=1,
                                                             uri="http://www.ontology-of-units-of-measure.org/resource/om-2/degreeCelsius"),
@@ -84,7 +84,6 @@ class OpenSearchClientTest(unittest.TestCase):
                                                 name="ID",
                                                 internal_name="id",
                                                 type=ColumnType.BIGINT,
-                                                is_public=True,
                                                 is_null_allowed=False)])]
             database = OpenSearchClient().update_database(database_id=req.id, data=req)
             self.assertEqual(1, database.id)
@@ -118,7 +117,6 @@ class OpenSearchClientTest(unittest.TestCase):
             self.assertEqual(ColumnType.BIGINT, database.tables[0].columns[0].type)
             self.assertEqual(1, database.tables[0].columns[0].database_id)
             self.assertEqual(1, database.tables[0].columns[0].table_id)
-            self.assertEqual(True, database.tables[0].columns[0].is_public)
             self.assertEqual(False, database.tables[0].columns[0].is_null_allowed)
 
     def test_update_database_create_succeeds(self):
diff --git a/dbrepo-ui/components/ResourceStatus.vue b/dbrepo-ui/components/ResourceStatus.vue
index 36544b1c299ac09ba0fcf339ff2bf04d418980ee..5167d899ea6e73c150db478f8fc3b063a3ba1e12 100644
--- a/dbrepo-ui/components/ResourceStatus.vue
+++ b/dbrepo-ui/components/ResourceStatus.vue
@@ -38,14 +38,12 @@ export default {
       if (!this.resource) {
         return null
       }
-      if (!this.resource.is_public) {
-        if (!this.resource.is_schema_public) {
-          return 'draft'
-        }
-        return 'private'
-      }
-      if (!this.resource.is_schema_public) {
-        return 'private'
+      if (!this.resource.is_public && !this.resource.is_schema_public) {
+        return 'draft'
+      } else if(!this.resource.is_public && this.resource.is_schema_public) {
+        return 'schema'
+      } else if(this.resource.is_public && !this.resource.is_schema_public) {
+        return 'data'
       }
       return 'public'
     },
@@ -57,10 +55,11 @@ export default {
     },
     color () {
       switch (this.mode) {
-        case 'private':
-          return 'secondary'
-        case 'draft':
+        case 'schema':
+        case 'data':
           return 'warning'
+        case 'draft':
+          return 'error'
         case 'public':
           return 'success'
       }
diff --git a/dbrepo-ui/components/identifier/Select.vue b/dbrepo-ui/components/identifier/Select.vue
index bacbab44149b75289a81741afc52fd4c2983283f..e1de8d1b26bc021bdf54d98c106d7e79cd8ec65d 100644
--- a/dbrepo-ui/components/identifier/Select.vue
+++ b/dbrepo-ui/components/identifier/Select.vue
@@ -86,7 +86,7 @@ export default {
       if (!this.user) {
         return this.identifiers.filter(i => i.status === 'published')
       }
-      return this.identifiers.filter(i => i.status === 'published' || i.creator.id === this.user.id)
+      return this.identifiers.filter(i => i.status === 'published' || i.owner.id === this.user.id)
     },
     listVariant () {
       const runtimeConfig = useRuntimeConfig()
diff --git a/dbrepo-ui/components/subset/SubsetList.vue b/dbrepo-ui/components/subset/SubsetList.vue
index 6d84a6a48ea91bbbbbf7ef6fa869c2230ecbcd29..62a456eb793ae1f95a49fda7569e8fb8799b9ccb 100644
--- a/dbrepo-ui/components/subset/SubsetList.vue
+++ b/dbrepo-ui/components/subset/SubsetList.vue
@@ -26,8 +26,6 @@
             :to="link(item)"
             :href="link(item)">
             <template v-slot:append>
-              <ResourceStatus
-                :resource="item" />
               <v-tooltip
                 v-if="hasPublishedIdentifier(item)"
                 :text="$t('pages.identifier.pid.title')"
diff --git a/dbrepo-ui/components/subset/SubsetToolbar.vue b/dbrepo-ui/components/subset/SubsetToolbar.vue
index 4d1f8d7c4aef6081b8992deb2bf67daddb444f1d..405bb6d00fe4989a2e73c6abb2bf518194ff5b1a 100644
--- a/dbrepo-ui/components/subset/SubsetToolbar.vue
+++ b/dbrepo-ui/components/subset/SubsetToolbar.vue
@@ -158,7 +158,7 @@ export default {
       if (!this.user || !this.subset || !this.database) {
         return false
       }
-      return this.database.owner.id === this.user.id || (this.subset.creator.id === this.user.id && this.hasReadAccess)
+      return this.database.owner.id === this.user.id || (this.subset.owner.id === this.user.id && this.hasReadAccess)
     },
     title () {
       if (!this.identifier) {
diff --git a/dbrepo-ui/components/table/TableToolbar.vue b/dbrepo-ui/components/table/TableToolbar.vue
index b91ce9a6ee1b95fecb873fc730f9e01cc1a0f0a9..9821cb6fe4bbbbcfb4ad5de1df1160fedb84c722 100644
--- a/dbrepo-ui/components/table/TableToolbar.vue
+++ b/dbrepo-ui/components/table/TableToolbar.vue
@@ -149,7 +149,7 @@ export default {
       if (!this.user) {
         return false
       }
-      return this.hasReadAccess || this.table.owned_by === this.user.id || this.database.owner.id === this.user.id
+      return this.hasReadAccess || this.table.owner.id === this.user.id || this.database.owner.id === this.user.id
     },
     canViewSchema () {
       if (!this.table) {
@@ -161,7 +161,7 @@ export default {
       if (!this.user) {
         return false
       }
-      return this.hasReadAccess || this.table.owned_by === this.user.id || this.database.owner.id === this.user.id
+      return this.hasReadAccess || this.table.owner.id === this.user.id || this.database.owner.id === this.user.id
     },
     canImportCsv () {
       if (!this.roles || !this.table || !this.user) {
diff --git a/dbrepo-ui/locales/en-US.json b/dbrepo-ui/locales/en-US.json
index c4d5ef5eba6f9d6592ef2f47c86644530d82c1e7..2e94f572ec68f7f3c595254ed5c9a5e14099e623 100644
--- a/dbrepo-ui/locales/en-US.json
+++ b/dbrepo-ui/locales/en-US.json
@@ -607,7 +607,8 @@
       "status": {
         "title": "Status",
         "public": "Public",
-        "private": "Private",
+        "data": "Data-only",
+        "schema": "Schema-only",
         "draft": "Draft"
       },
       "resource": {
diff --git a/dbrepo-ui/pages/database/[database_id]/info.vue b/dbrepo-ui/pages/database/[database_id]/info.vue
index 4d88b2c6c86dfdb86e9e61c7a601212e0c7293ad..0cb01e8d4c481d088bd330d1865840841c0d84ee 100644
--- a/dbrepo-ui/pages/database/[database_id]/info.vue
+++ b/dbrepo-ui/pages/database/[database_id]/info.vue
@@ -273,7 +273,7 @@ export default {
       if (!this.user) {
         return this.identifiers.filter(i => i.status === 'published')
       }
-      return this.identifiers.filter(i => i.status === 'published' || i.creator.id === this.user.id)
+      return this.identifiers.filter(i => i.status === 'published' || i.owner.id === this.user.id)
     },
     identifier () {
       if (this.pid) {
diff --git a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/info.vue b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/info.vue
index f7b025e98298fd37181d551822e9a4b18b849e16..5fc351216dbf90ec71843bc65c11889a4c883f9c 100644
--- a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/info.vue
+++ b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/info.vue
@@ -157,7 +157,7 @@ export default {
       if (!this.user) {
         return this.identifiers.filter(i => i.status === 'published')
       }
-      return this.identifiers.filter(i => i.status === 'published' || i.creator.id === this.user.id)
+      return this.identifiers.filter(i => i.status === 'published' || i.owner.id === this.user.id)
     },
     identifier () {
       if (this.pid) {
diff --git a/dbrepo-ui/pages/search.vue b/dbrepo-ui/pages/search.vue
index 04f94a2d8e19e7cfe8747a7bc8bf5d64ad541ae0..d822643204c47860ef8a9be87a8a25b3571bdadb 100644
--- a/dbrepo-ui/pages/search.vue
+++ b/dbrepo-ui/pages/search.vue
@@ -215,7 +215,7 @@ export default {
         }
         return title
       } else if (this.isUser(item)) {
-        return item.creator.qualified_name
+        return item.owner.qualified_name
       }
       return null
     },
@@ -296,7 +296,7 @@ export default {
       } else if (this.isUnit(item)) {
       } else if (this.isConcept(item)) {
       } else if (this.isUser(item)) {
-        if (item.creator.attributes.orcid) {
+        if (item.owner.attributes.orcid) {
           tags.push({ text: 'ORCID', color: 'success' })
         }
       }