diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 11f2092..2726f8c 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -1237,7 +1237,7 @@ function node_access_needs_rebuild($rebuild = NULL) {
  */
 function node_access_rebuild($batch_mode = FALSE) {
   $access_control_handler = \Drupal::entityManager()->getAccessControlHandler('node');
-  $access_control_handler->deleteGrants();
+  $access_control_handler->deleteDefaultGrant();
   // Only recalculate if the site is using a node_access module.
   if (count(\Drupal::moduleHandler()->getImplementations('node_grants'))) {
     if ($batch_mode) {
@@ -1264,13 +1264,15 @@ function node_access_rebuild($batch_mode = FALSE) {
         // To preserve database integrity, only write grants if the node
         // loads successfully.
         if (!empty($node)) {
-          $access_control_handler->writeGrants($node);
+          $access_control_handler->writeGrants($node, TRUE);
         }
       }
     }
   }
   else {
-    // Not using any node_access modules. Add the default grant.
+    // Not using any node_access modules. Add the default grant after removing
+    // all old records.
+    $access_control_handler->deleteGrants();
     $access_control_handler->writeDefaultGrant();
   }
 
@@ -1302,7 +1304,7 @@ function _node_access_rebuild_batch_operation(&$context) {
   $limit = 20;
   $nids = \Drupal::entityQuery('node')
     ->condition('nid', $context['sandbox']['current_node'], '>')
-    ->sort('nid', 'ASC')
+    ->sort('nid', 'DESC')
     ->range(0, $limit)
     ->execute();
   $nodes = node_load_multiple($nids, TRUE);
@@ -1310,7 +1312,7 @@ function _node_access_rebuild_batch_operation(&$context) {
     // To preserve database integrity, only write grants if the node
     // loads successfully.
     if (!empty($node)) {
-      \Drupal::entityManager()->getAccessControlHandler('node')->writeGrants($node);
+      \Drupal::entityManager()->getAccessControlHandler('node')->writeGrants($node, TRUE);
     }
     $context['sandbox']['progress']++;
     $context['sandbox']['current_node'] = $nid;
diff --git a/core/modules/node/src/NodeAccessControlHandler.php b/core/modules/node/src/NodeAccessControlHandler.php
index 0cb51c4..8d7e07f 100644
--- a/core/modules/node/src/NodeAccessControlHandler.php
+++ b/core/modules/node/src/NodeAccessControlHandler.php
@@ -193,6 +193,13 @@ public function writeDefaultGrant() {
   /**
    * {@inheritdoc}
    */
+  public function deleteDefaultGrant() {
+    $this->grantStorage->deleteDefault();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function deleteGrants() {
     $this->grantStorage->delete();
   }
diff --git a/core/modules/node/src/NodeAccessControlHandlerInterface.php b/core/modules/node/src/NodeAccessControlHandlerInterface.php
index 23509e5..d7b5676 100644
--- a/core/modules/node/src/NodeAccessControlHandlerInterface.php
+++ b/core/modules/node/src/NodeAccessControlHandlerInterface.php
@@ -63,6 +63,11 @@ public function writeGrants(NodeInterface $node, $delete = TRUE);
   public function writeDefaultGrant();
 
   /**
+   * Delete default node access entry.
+   */
+  public function deleteDefaultGrant();
+
+  /**
    * Deletes all node access entries.
    */
   public function deleteGrants();
diff --git a/core/modules/node/src/NodeGrantDatabaseStorage.php b/core/modules/node/src/NodeGrantDatabaseStorage.php
index 9cddb2e..c2ee543 100644
--- a/core/modules/node/src/NodeGrantDatabaseStorage.php
+++ b/core/modules/node/src/NodeGrantDatabaseStorage.php
@@ -226,6 +226,13 @@ public function delete() {
   /**
    * {@inheritdoc}
    */
+  public function deleteDefault() {
+    $this->database->delete('node_access')->condition('nid', 0);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function writeDefault() {
     $this->database->insert('node_access')
       ->fields(array(
diff --git a/core/modules/node/src/NodeGrantDatabaseStorageInterface.php b/core/modules/node/src/NodeGrantDatabaseStorageInterface.php
index e865387..4590fa3 100644
--- a/core/modules/node/src/NodeGrantDatabaseStorageInterface.php
+++ b/core/modules/node/src/NodeGrantDatabaseStorageInterface.php
@@ -88,6 +88,11 @@ public function write(NodeInterface $node, array $grants, $realm = NULL, $delete
   public function delete();
 
   /**
+   * Delete default node access entry.
+   */
+  public function deleteDefault();
+
+  /**
    * Creates the default node access grant entry.
    */
   public function writeDefault();
