diff --git a/core/modules/node/lib/Drupal/node/NodeStorageController.php b/core/modules/node/lib/Drupal/node/NodeStorageController.php
index 3993d24..f385ea6 100644
--- a/core/modules/node/lib/Drupal/node/NodeStorageController.php
+++ b/core/modules/node/lib/Drupal/node/NodeStorageController.php
@@ -138,7 +138,9 @@ function postSave(EntityInterface $node, $update) {
     // default revision. There's no need to delete existing records if the node
     // is new.
     if ($node->isDefaultRevision()) {
-      node_access_acquire_grants($node, $update);
+      // @TODO add as methods to the Entity controller.
+      $grants = node_access_acquire_grants($node);
+      node_access_write_grants($node, $grants, NULL, $update);
     }
   }
   /**
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 5c11424..7981eaa 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -3125,15 +3125,17 @@ function node_query_node_access_alter(AlterableInterface $query) {
  * This function is called when a node is saved, and can also be called by
  * modules if something other than a node save causes node access permissions to
  * change. It collects all node access grants for the node from
- * hook_node_access_records() implementations, allows these grants to be altered
- * via hook_node_access_records_alter() implementations, and saves the collected
- * and altered grants to the database.
+ * hook_node_access_records() implementations and allows these grants to be altered
+ * via hook_node_access_records_alter() implementations.
  *
  * @param Drupal\node\Node $node
  *   The $node to acquire grants for.
  * @param $delete
  *   (optional) Whether to delete existing node access records before inserting
  *   new ones. Defaults to TRUE.
+ *
+ * @return array $grants
+ *   An array of node access grants.
  */
 function node_access_acquire_grants(Node $node, $delete = TRUE) {
   $grants = module_invoke_all('node_access_records', $node);
@@ -3143,7 +3145,7 @@ function node_access_acquire_grants(Node $node, $delete = TRUE) {
   if (empty($grants) && !empty($node->status)) {
     $grants[] = array('realm' => 'all', 'gid' => 0, 'grant_view' => 1, 'grant_update' => 0, 'grant_delete' => 0);
   }
-  _node_access_write_grants($node, $grants, NULL, $delete);
+  return $grants;
 }
 
 /**
@@ -3154,9 +3156,6 @@ function node_access_acquire_grants(Node $node, $delete = TRUE) {
  * node_access can use this function when doing mass updates due to widespread
  * permission changes.
  *
- * Note: Don't call this function directly from a contributed module. Call
- * node_access_acquire_grants() instead.
- *
  * @param Drupal\node\Node $node
  *   The $node being written to. All that is necessary is that it contains a
  *   nid.
@@ -3174,7 +3173,7 @@ function node_access_acquire_grants(Node $node, $delete = TRUE) {
  *   purposes, and assumes the caller has already performed a mass delete of
  *   some form. Defaults to TRUE.
  */
-function _node_access_write_grants(Node $node, $grants, $realm = NULL, $delete = TRUE) {
+function node_access_write_grants(Node $node, $grants, $realm = NULL, $delete = TRUE) {
   if ($delete) {
     $query = db_delete('node_access')->condition('nid', $node->nid);
     if ($realm) {
@@ -3276,7 +3275,8 @@ function node_access_rebuild($batch_mode = FALSE) {
         // To preserve database integrity, only acquire grants if the node
         // loads successfully.
         if (!empty($node)) {
-          node_access_acquire_grants($node);
+          $grants = node_access_acquire_grants($node);
+          node_access_write_grants($node, $grants, NULL, FALSE);
         }
       }
     }
