diff --git a/core/modules/system/src/Tests/Update/UpdateScriptTest.php b/core/modules/system/src/Tests/Update/UpdateScriptTest.php
index 7b5638d..3f4edff 100644
--- a/core/modules/system/src/Tests/Update/UpdateScriptTest.php
+++ b/core/modules/system/src/Tests/Update/UpdateScriptTest.php
@@ -56,20 +56,38 @@ function testUpdateAccess() {
     $this->drupalGet($this->updateUrl, array('external' => TRUE));
     $this->assertResponse(403);
 
+    // Check that a link to the update page is not accessible to regular users.
+    $this->drupalGet('/update-script-test/database-updates-menu-item');
+    $this->assertNoLink('Run database updates');
+
     // Try accessing update.php as an anonymous user.
     $this->drupalLogout();
     $this->drupalGet($this->updateUrl, array('external' => TRUE));
     $this->assertResponse(403);
 
+    // Check that a link to the update page is not accessible to anonymous
+    // users.
+    $this->drupalGet('/update-script-test/database-updates-menu-item');
+    $this->assertNoLink('Run database updates');
+
     // Access the update page with the proper permission.
     $this->drupalLogin($this->updateUser);
     $this->drupalGet($this->updateUrl, array('external' => TRUE));
     $this->assertResponse(200);
 
+    // Check that a link to the update page is accessible to users with proper
+    // permissions.
+    $this->drupalGet('/update-script-test/database-updates-menu-item');
+    $this->assertLink('Run database updates');
+
     // Access the update page as user 1.
     $this->drupalLogin($this->rootUser);
     $this->drupalGet($this->updateUrl, array('external' => TRUE));
     $this->assertResponse(200);
+
+    // Check that a link to the update page is accessible to user 1.
+    $this->drupalGet('/update-script-test/database-updates-menu-item');
+    $this->assertLink('Run database updates');
   }
 
   /**
diff --git a/core/modules/system/tests/modules/update_script_test/src/Controller/UpdateScriptTestController.php b/core/modules/system/tests/modules/update_script_test/src/Controller/UpdateScriptTestController.php
new file mode 100644
index 0000000..b72ab1b
--- /dev/null
+++ b/core/modules/system/tests/modules/update_script_test/src/Controller/UpdateScriptTestController.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\update_script_test\Controller;
+
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\Url;
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * Controller routines for update_script_test routes.
+ */
+class UpdateScriptTestController extends ControllerBase {
+
+  /**
+   * Outputs a link to the database updates URL.
+   */
+  public function databaseUpdatesMenuItem(Request $request) {
+    // @todo Simplify with https://www.drupal.org/node/2548095
+    $base_url = str_replace('/update.php', '', $request->getBaseUrl());
+    $url = (new Url('system.db_update'))->setOption('base_url', $base_url);
+    $build['main'] = array(
+      '#type' => 'link',
+      '#title' => $this->t('Run database updates'),
+      '#url' => $url,
+      '#access' => $url->access($this->currentUser()),
+    );
+
+    return $build;
+  }
+
+}
diff --git a/core/modules/system/tests/modules/update_script_test/update_script_test.routing.yml b/core/modules/system/tests/modules/update_script_test/update_script_test.routing.yml
new file mode 100644
index 0000000..68823de
--- /dev/null
+++ b/core/modules/system/tests/modules/update_script_test/update_script_test.routing.yml
@@ -0,0 +1,6 @@
+update_script_test.database_updates_menu_item:
+  path: '/update-script-test/database-updates-menu-item'
+  defaults:
+    _controller: '\Drupal\update_script_test\Controller\UpdateScriptTestController::databaseUpdatesMenuItem'
+  requirements:
+    _access: 'TRUE'
