diff --git a/modules/node/node.module b/modules/node/node.module
index 9e20234..5ff92d0 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -3401,18 +3403,25 @@ function node_access_write_grants($node, $grants, $realm = NULL, $delete = TRUE)
 
   // Only perform work when node_access modules are active.
   if (!empty($grants) && count(module_implements('node_grants'))) {
-    $query = db_insert('node_access')->fields(array('nid', 'realm', 'gid', 'grant_view', 'grant_update', 'grant_delete'));
-    foreach ($grants as $grant) {
-      if ($realm && $realm != $grant['realm']) {
-        continue;
+    $has_values = FALSE;
+    $is_existing = db_query("SELECT nid FROM {node_access} WHERE nid = :nid", array(':nid' => $node->nid))->fetchField();
+    if(!$is_existing) {
+      $query = db_insert('node_access')->fields(array('nid', 'realm', 'gid', 'grant_view', 'grant_update', 'grant_delete'));
+      foreach ($grants as $grant) {
+        if ($realm && $realm != $grant['realm']) {
+          continue;
+        }
+        // Only write grants; denies are implicit.
+        if ($grant['grant_view'] || $grant['grant_update'] || $grant['grant_delete']) {
+          $grant['nid'] = $node->nid;
+          $query->values($grant);
+          $has_values = TRUE;
+        }
       }
-      // Only write grants; denies are implicit.
-      if ($grant['grant_view'] || $grant['grant_update'] || $grant['grant_delete']) {
-        $grant['nid'] = $node->nid;
-        $query->values($grant);
+      if ($has_values) {
+        $query->execute();
       }
     }
-    $query->execute();
   }
 }
 
