diff --git a/linkchecker.pages.inc b/linkchecker.pages.inc
index f365e79..62fc3b4 100644
--- a/linkchecker.pages.inc
+++ b/linkchecker.pages.inc
@@ -133,17 +133,31 @@ function _linkchecker_report_page($query, $account = NULL) {
 
     // Show link to nodes having this broken link.
     if (!empty($account)) {
-      $nodes = db_query('SELECT ln.nid
-        FROM {linkchecker_node} ln
-        INNER JOIN {node} n ON n.nid = ln.nid
-        INNER JOIN {node_revision} r ON r.vid = n.vid
-        WHERE ln.lid = :lid AND (n.uid = :uid1 OR r.uid = :uid2)', array(':lid' => $link->lid, ':uid1' => $account->uid, ':uid2' => $account->uid));
+      $query = db_select('node', 'n');
+      $query->innerJoin('linkchecker_node', 'ln', 'n.nid = ln.nid');
+      $query->fields('ln', array('nid'));
+      $query->innerJoin('node_revision', 'r', 'r.vid = n.vid');
+      $query->condition('ln.lid', $link->lid);
+      $query->condition(db_or()
+        ->condition('n.uid', $account->uid)
+        ->condition('r.uid', $account->uid)
+      );
+      $query->addTag('node_access');
+      $nodes = $query->execute();
     }
     else {
-      $nodes = db_query('SELECT nid FROM {linkchecker_node} WHERE lid = :lid', array(':lid' => $link->lid));
+      $query = db_select('node', 'n');
+      $query->innerJoin('linkchecker_node', 'ln', 'n.nid = ln.nid');
+      $query->fields('ln', array('nid'));
+      $query->condition('ln.lid', $link->lid);
+      $query->addTag('node_access');
+      $nodes = $query->execute();
     }
     foreach ($nodes as $node) {
-      $links[] = l(t('Edit node @node', array('@node' => $node->nid)), 'node/' . $node->nid . '/edit', array('query' => drupal_get_destination()));
+      $full_node = node_load($node->nid);
+      if (node_access('update', $full_node)) {
+        $links[] = l(t('Edit node @node', array('@node' => $node->nid)), 'node/' . $node->nid . '/edit', array('query' => drupal_get_destination()));
+      }
     }
 
     // Show link to comments having this broken link.
