diff --git a/reviewboard/admin/forms.py b/reviewboard/admin/forms.py
index 93c4f77e828788c70c03cdb69bf520045947d157..abd2e049f6c071ec18ae0bf381b561d03bb0a93e 100644
--- a/reviewboard/admin/forms.py
+++ b/reviewboard/admin/forms.py
@@ -97,6 +97,12 @@ class GeneralSettingsForm(SiteSettingsForm):
                     "contain the subdirectory Review Board is installed in."),
         widget=forms.TextInput(attrs={'size': '30'}))
 
+    site_read_only = forms.BooleanField(
+        label=_('Enable read-only mode'),
+        help_text=_('If checked, non-superusers will not be able to make '
+                    'changes to the Review Board database.'),
+        required=False)
+
     site_media_url = forms.CharField(
         label=_("Media URL"),
         help_text=_("The URL to the media files. Leave blank to use the "
@@ -280,7 +286,8 @@ class GeneralSettingsForm(SiteSettingsForm):
                 'title': _("Site Settings"),
                 'fields': ('company', 'server', 'site_media_url',
                            'site_static_url', 'site_admin_name',
-                           'site_admin_email', 'locale_timezone'),
+                           'site_admin_email', 'locale_timezone',
+                           'site_read_only'),
             },
             {
                 'classes': ('wide',),
diff --git a/reviewboard/admin/siteconfig.py b/reviewboard/admin/siteconfig.py
index e546d2f7a1d37098c2bd35789360c0e423479a05..6ce0d007ab123e6cfebd35b6a1c1bf1b3d43efc2 100644
--- a/reviewboard/admin/siteconfig.py
+++ b/reviewboard/admin/siteconfig.py
@@ -155,6 +155,7 @@ defaults.update({
     'search_enable': False,
     'send_support_usage_stats': True,
     'site_domain_method': 'http',
+    'site_read_only': False,
 
     'search_results_per_page': 20,
     'search_backend_id': WhooshBackend.search_backend_id,
