diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java
index b7af77ba0a69b17eaed5451085ac2b85dfa12269..a55fcad69ac1f3cc93f5901854bcf06aa8480404 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/server/QueryServer.java
@@ -76,7 +76,11 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS
 
     private static final String CREATOR_MINIMAL_ROLE_KEY = "creator-minimal-role";
 
-    private static final String DEFAULT_CREATOR_MINIMAL_ROLE = RoleWithHierarchy.SPACE_POWER_USER.name();
+    private static final String DEFAULT_CREATOR_MINIMAL_ROLE_SPACE =
+            RoleWithHierarchy.SPACE_POWER_USER.name();
+
+    private static final String DEFAULT_CREATOR_MINIMAL_ROLE_INSTANCE =
+            RoleWithHierarchy.INSTANCE_OBSERVER.name();
 
     private static final String DATA_SPACE_KEY = "data-space";
 
@@ -303,11 +307,11 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS
                     new SimpleDatabaseConfigurationContext(databaseProperties);
             final String label =
                     PropertyUtils.getMandatoryProperty(databaseProperties, LABEL_PROPERTY_KEY);
-            final String creatorMinimalRoleString =
-                    PropertyUtils.getProperty(databaseProperties, CREATOR_MINIMAL_ROLE_KEY,
-                            DEFAULT_CREATOR_MINIMAL_ROLE);
             final String dataSpaceOrNullString =
                     PropertyUtils.getProperty(databaseProperties, DATA_SPACE_KEY);
+            final String creatorMinimalRoleString =
+                    PropertyUtils.getProperty(databaseProperties, CREATOR_MINIMAL_ROLE_KEY,
+                            getDefaultRoleForDataSource(dataSpaceOrNullString));
 
             if (labels.contains(label))
             {
@@ -331,7 +335,8 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS
             }
             try
             {
-                final RoleWithHierarchy creatorMinimalRole = RoleWithHierarchy.valueOf(creatorMinimalRoleString);
+                final RoleWithHierarchy creatorMinimalRole =
+                        RoleWithHierarchy.valueOf(creatorMinimalRoleString);
                 definitions.put(databaseKey, new DatabaseDefinition(configurationContext,
                         databaseKey, label, creatorMinimalRole, dataSpaceOrNull));
             } catch (IllegalArgumentException ex)
@@ -344,4 +349,15 @@ public class QueryServer extends AbstractServer<IQueryServer> implements IQueryS
         }
         QueryAccessController.initialize(definitions);
     }
+
+    private String getDefaultRoleForDataSource(final String dataSpaceOrNull)
+    {
+        if (dataSpaceOrNull == null) // database contains data for the whole instance
+        {
+            return DEFAULT_CREATOR_MINIMAL_ROLE_INSTANCE;
+        } else
+        {
+            return DEFAULT_CREATOR_MINIMAL_ROLE_SPACE;
+        }
+    }
 }