diff --git a/keyserver/src/database/migration-config.js b/keyserver/src/database/migration-config.js
--- a/keyserver/src/database/migration-config.js
+++ b/keyserver/src/database/migration-config.js
@@ -5,6 +5,7 @@
 import bots from 'lib/facts/bots.js';
 import genesis from 'lib/facts/genesis.js';
 import { policyTypes } from 'lib/facts/policies.js';
+import { specialRoles } from 'lib/permissions/special-roles.js';
 import { messageTypes } from 'lib/types/message-types-enum.js';
 import { threadPermissions } from 'lib/types/thread-permission-types.js';
 import { threadTypes } from 'lib/types/thread-types-enum.js';
@@ -672,6 +673,25 @@
           ADD COLUMN blob_holder char(36) CHARSET latin1
       `),
   ],
+  [
+    54,
+    async () => {
+      await dbQuery(
+        SQL`
+          ALTER TABLE roles
+            ADD COLUMN IF NOT EXISTS special_role 
+              tinyint(2) UNSIGNED DEFAULT NULL,
+            DROP KEY IF EXISTS thread,
+            ADD KEY IF NOT EXISTS thread_special_role (thread, special_role);
+
+          UPDATE roles r
+          JOIN threads t ON r.id = t.default_role
+          SET r.special_role = ${specialRoles.DEFAULT_ROLE};
+        `,
+        { multipleStatements: true },
+      );
+    },
+  ],
 ]);
 const newDatabaseVersion: number = Math.max(...migrations.keys());
 
diff --git a/keyserver/src/database/setup-db.js b/keyserver/src/database/setup-db.js
--- a/keyserver/src/database/setup-db.js
+++ b/keyserver/src/database/setup-db.js
@@ -135,7 +135,8 @@
         thread bigint(20) NOT NULL,
         name varchar(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
         permissions json NOT NULL,
-        creation_time bigint(20) NOT NULL
+        creation_time bigint(20) NOT NULL,
+        special_role tinyint(2) UNSIGNED DEFAULT NULL
       ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
       CREATE TABLE sessions (
@@ -341,7 +342,7 @@
 
       ALTER TABLE roles
         ADD PRIMARY KEY (id),
-        ADD KEY thread (thread),
+        ADD KEY thread_special_role (thread, special_role),
         ADD UNIQUE KEY thread_name (thread, name);
 
       ALTER TABLE sessions
diff --git a/lib/permissions/special-roles.js b/lib/permissions/special-roles.js
new file mode 100644
--- /dev/null
+++ b/lib/permissions/special-roles.js
@@ -0,0 +1,5 @@
+// @flow
+
+export const specialRoles = Object.freeze({
+  DEFAULT_ROLE: 1,
+});